目錄
- [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
架構開源,可以加群下載下傳源碼