linq2db.EntityFrameworkCore 介绍
程序员文章站
2022-05-06 21:51:34
"linq2db.EntityFrameworkCore" 是一个ef core的插件,对linq语法的扩展 对复杂的sql都有很好的支持,他是基于linq2db (provided by LINQ To DB) 如果你使用了linq2db的语法扩展那么你必须使用下面的方法进行查询 下面是 linq ......
linq2db.entityframeworkcore 是一个ef core的插件,对linq语法的扩展
对复杂的sql都有很好的支持,他是基于linq2db (provided by linq to db)
如果你使用了linq2db的语法扩展那么你必须使用下面的方法进行查询
// tolinqtodb是必须的 var temp = qry.tolinqtodb().tolist();
下面是 linq2db 的冰山一角
join
1. innerjoin
var qry = from t1 in db.t from t2 in db.t2.innerjoin(m => m.t1id == t1.id)
2.leftjoin
var qry = from t1 in db.t from t2 in db.t2.leftjoin(m => m.t1id == t1.id)
3.rightjoin
var qry = from t1 in db.t from t2 in db.t2.rightjoin(m => m.t1id == t1.id)
sum
// 相比于原来linq,简洁了很多。 var qry = from t1 in db.t from t2 in db.t2.leftjoin(m => m.t1id == t1.id) select sql.ext.sum(t1.type == "a" ? t1.number * (t1.saleprice-t2.originalprice) : 0).tovalue();
countext
//我要查t2中不重复的 t1的id有多少个 var qry = from t1 in db.t from t2 in db.t2.leftjoin(m => m.t1id == t1.id) where t1.some=='' group new {t1,t2} by t2.some into g select new { //相当于sql count(distinct t2.t1id) number = g.countext(m => m.t2.t1id, sql.aggregatemodifier.distinct) }
对于一些sql函数的支持
datepart
var qry = from t1 in db.t where t1.saledate > begintime group t1 by sql.datepart(sql.dateparts.month, t1 .saledate) into g select new { month = g.key, flowamount = g.sum(m => m.saleway == "a" ? sql.abs(m.number * m.saleprice) : 0) - g.sum(m => m.saleway == "b" ? sql.abs(m.number * m.saleprice) : 0) };
当然还有更多的扩展方法,分别位于
包含于 sql , sql.ext,analyticfunctions 中
linq2db文档 :
当然还有批量更新的操作
如果是需要使用,那么最好再程序开始时运行以下代码
//因为他是幂等的 ,所以可以多次运行 linqtodbforeftools.initialize();
以下代码都是从github上抄下来的。
// fast insert big recordsets ctx.bulkcopy(new bulkcopyoptions {...}, items); // query for retrieving products that do not have duplicates by name var query = from p in ctx.products from op in ctx.products.leftjoin(op => op.productid != p.productid && op.name == p.name) where sql.tonullable(op.productid) == null select p; // insert these records into the same or another table query.insert(ctx.products.tolinqtodbtable(), s => new product { name = s.name ... }); // update these records by changing name based on previous value query.update(prev => new product { name = "u_" + prev.name ... }); // delete records that matched by query query.delete();
上一篇: php+mysqli使用预处理技术进行数据库查询的方法
下一篇: linux简单常用命令
推荐阅读
-
如何用cmd查看ip?cmd查看本机ip方法介绍(图文)
-
wifi管家好用吗?有什么用?wifi管家功能介绍(附wifi管家下载)
-
HTML5 FormData 方法介绍以及实现文件上传示例
-
HTML5里autofocus自动聚焦属性使用介绍
-
web服务器是什么,web服务器的功能及工作原理介绍
-
自动化设备软件开发是做什么的(附软件开发基本介绍)
-
面试项目介绍怎么说(项目经验的面试小技巧)
-
移动seo优化技巧,具体怎么优化请看本篇详细介绍
-
SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍
-
阿里旺旺个性签名怎么设置?阿里旺旺100条最有个性的签名介绍