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文档 : https://linq2db.github.io/index.html

当然还有批量更新的操作

如果是需要使用,那么最好再程序开始时运行以下代码

//因为他是幂等的 ,所以可以多次运行
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();

linq2db.EntityFrameworkCore 介绍的更多相关文章

  1. C# 中 SQLite 使用介绍

    关于SQLite SQLite是一款轻型的嵌入式的遵守ACID的关系型数据库管理系统,诞生已有15个年头了.随着移动互联的发展,现在得到了更广泛的使用. 在使用SQLite之前,我们势必要先了解它一些 ...

  2. .Net Core 之 MSBuild 介绍

    前言 关于 .NET Core 旧版本的 sdk 介绍可以参看我以前的 这篇 文章. 8 个小时前,.NET Core 项目组释放了 .NET Core 新一轮的 sdk 工具更新,即 RC4 版本 ...

  3. asp.net core mvc权限控制:权限控制介绍

    在进行业务软件开发的时候,都会涉及到权限控制的问题,asp.net core mvc提供了相关特性. 在具体介绍使用方法前,我们需要先了解几个概念: 1,claim:英文翻译过来是声明的意思,一个cl ...

  4. ASP.NET Core:使用EntityFrameworkCore操作MySql来丰富仓储模块

    概述 上一篇简单介绍了Dapper的基本用法,数据的存储为SqlServer.那么这一篇就记录一下使用EFCore来操作MySql的一些方式,这种模式比较适合那种一个项目中需要操作多种数据库的模式.不 ...

  5. .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  6. MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  7. Magicodes.Admin.Core开源框架总体介绍

    框架说明 Magicodes.Admin.Core框架在ABP以及ASP.NET ZERO的基础上进行了封装和完善,目前基于.NET Core 2.0+(Framework版本),由于部分组件在.NE ...

  8. 【ABP.Net】1.创建项目&介绍框架结构

    既然已经打开这个页面了,我就不介绍什么是ABP了.哈哈哈,如果想知道,请移驾.反正我是不说. 1.首先打开https://aspnetboilerplate.com/Templates 下载所需要的A ...

  9. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

随机推荐

  1. luogu P3767 膜法

    传送门 这题如果没有删除操作,可以直接使用可持久化并查集 注意到这种可持久化的依赖关系(是这样说的把)是一棵树,然后对于一个点,自己的操作会影响自己的那棵子树,并且如果是删除操作,就会使得一个子树没有 ...

  2. python中读取mongodb数据并保存为csv格式的文件

    import pandas as pd import matplotlib.pyplot as plt import pymongo %matplotlib inline # 连接mongodb数据库 ...

  3. 使用MiniProfiler检测页面性能

    1.引入nuget包 PM> Install-Package MiniProfiler 2.配置界面 @using StackExchange.Profiling; <head> . ...

  4. JSP表达式语音EF--2

    JSP 表达式语言 | 菜鸟教程 http://www.runoob.com/jsp/jsp-expression-language.html

  5. 2016 alictf Timer writeup

    Timer-smali逆向 参考文档:http://blog.csdn.net/qq_29343201/article/details/51649962 题目链接: https://pan.baidu ...

  6. IMAGENT CLASSIFICATION WITH DEEP CONVOLUTIONAL NEURAL NETWORKS(翻译)

    0 - 摘要  我们训练了一个大型的.深度卷积神经网络用来将ImageNet LSVRC-2010竞赛中的120万高分辨率的图像分为1000个不同的类别.在测试集上,我们在top-1和top-5上的错 ...

  7. ReentrantLock(重入锁)的使用

    //效果和synchronized一样,都可以同步执行,lock方法获得锁,unlock方法释放锁public class MyService { private Lock lock = new Re ...

  8. 框架中的导航框架 & position定位

    框架中,通过链接将一个页面显示在另一个框架中:   总框架: <frameset cols="15%,*">   <frame src="xx.html ...

  9. pyinstaller 打包exe可执行文件

    Python打包EXE方法之一 一.安装Pyinstaller 1.安装pywin32 下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的pywin32,下载后安装 使用pi ...

  10. Kafka管理工具介绍【转】

    Kafka内部提供了许多管理脚本,这些脚本都放在$KAFKA_HOME/bin目录下,而这些类的实现都是放在源码的kafka/core/src/main/scala/kafka/tools/路径下. ...