![86b965d33501e4d0a6a94270dcf27fee.png](https://img-blog.csdnimg.cn/img_convert/86b965d33501e4d0a6a94270dcf27fee.png)
LinqSharp 是个开源 LINQ 扩展库,它允许您编写简单代码来生成复杂查询,包括查询扩展和动态查询生成。
LinqSharp.EFCore 是对 EntityFramework 的增强库,提供更多数据注解、数据库函数及自定义储存规则等。
LinqSharp:为 LINQ 提供更多通用扩展github.com由于内容较多,将分篇介绍公开内容、原理及案例分享:
- LinqSharp:简化复杂查询
- LinqSharp:动态构建 LINQ 查询
- LinqSharp.EFCore:表设计数据注解
- LinqSharp.EFCore:字段标准化数据注解
- LinqSharp.EFCore:函数映射
- LinqSharp.EFCore:列式存储代理
- LinqSharp.EFCore:关联计算与审计
动态 LINQ
虽然 LINQ 已经可以适应多数的查询情景,但是我们依然需要动态 LINQ 来支持更多的查询场景。
例如,下面这个例子:
- 案例需要接受输入的 不定组数 的数据,每组数据为 (TitleOfCourtesy,City);
- 查询 Employees 表中 TitleOfCourtesy 和 City 匹配输入数据的记录。
假设输入数据:
var searches = new[] {
("Mr.", "London"), ("Ms.", "Seattle") };
如果是 定量 数据,我们很容易写出静态 LINQ:
var query = sqlite.Employees.Where(x =>
(x.TitleOfCourtesy == "Mr." && x.City == "London")
|| (x.TitleOfCourtesy == "Ms." && x.City == "Seattle"));
如果是 不定量 数据,那么就需要按以下逻辑进行
- 使用 for / foreach 为每组数据创建查询子条件;
- 把所有查询子条件使用 and / or 连接起来进行查询。
这样我们就需要使用 动态LINQ 查询。
静态查询拆分
XWhere 是 LinqSharp 提供的动态查询方法。
首先了解如何将静态查询表达式拆分为动态查询。例如,
var query &