天天看點

[LINQ2Dapper]最完整Dapper To Linq架構(四)---Linq和SQL并行使用目錄

目錄

  • [LINQ2Dapper]最完整Dapper To Linq架構(一)---基礎查詢
  • [LINQ2Dapper]最完整Dapper To Linq架構(二)---動态化查詢
  • [LINQ2Dapper]最完整Dapper To Linq架構(三)---實體類關系映射
  • [LINQ2Dapper]最完整Dapper To Linq架構(四)---Linq和SQL并行使用
  • [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("[email protected]", new { code = "3" })
.ToList();
           

Where<users>(x => x.roleId > 0 && x.roleId < 10)為linq部分,Where("[email protected]", 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

架構開源,可以加群下載下傳源碼