[LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL並行使用


目錄

 

此例子是使用LINQ2Dapper封裝,效率優於EntityFramwork,並且支持.NetFramework和.NetCore框架,只依賴於Dapper
支持.net framework4.6.1及以上

支持.net core2.0及以上

1.同時使用LINQ和SQL進行查詢

Connection為連接對象,詳情請見 [LINQ2Dapper]最完整Dapper To Linq框架(一)

為了給予用戶更多選擇,可以使用LINQ和sql一起進行查詢,來實現一些較為復雜的邏輯

例如

Connection.QuerySet<users>()
.Where<users>(x => x.roleId > 0 && x.roleId < 10)
.Where("users.code=@code", new { code = "3" })
.ToList();

Where<users>(x => x.roleId > 0 && x.roleId < 10)為linq部分,Where("code=@code", new { code = "3" })為sql部分,

最終會拼接成

SELECT * FROM users WHERE roleId>0 AND roleId<10 AND code=3

  

2.復雜的SQL也可支持

Connection.QuerySet<users>()
.Where($@"roleId in(select roleId from role_Power where createDate<@createDate)", 
                new
                {
                    createDate = DateTime.Now
                }).Where(x => x.code != "3")
.ToList();  

這是一個子查詢條件的拼接

3.連表也支持SQL

默認SQL連表不會查詢連表的字段

var users = Connection.QuerySet<users>()
            .Join("LEFT JOIN project_Role ON users.roleId=project_Role.id")
            .Get<dynamic>();

如果想獲取連表的字段需要指明實體類

var users = Connection.QuerySet<users>()
            .Join<project_Role>("LEFT JOIN project_Role ON users.roleId=project_Role.id")
            .Get<dynamic>();

4.連表時注意

Connection.QuerySet<users>()
.Join<users, project_Role>(x => x.roleId, y => y.id)
.Where("project_Role.Id>@Id", new { Id = 1 })
.ToList();

連表時需要加上表前綴,以免字段重名沖突

例如project_Role.Id ,project_Role為表名

 

完整Demo可以去Github上下載:

https://github.com/a935368322/Kogel.Dapper.Test

如有問題也可以加QQ群討論:

技術群 710217654

框架開源,可以加群下載源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM