千家信息网

ynamic LINQ如何创建高级查询服务

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章将为大家详细讲解有关ynamic LINQ如何创建高级查询服务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:在业务开发中,一个常用的功能就是"高级查询
千家信息网最后更新 2025年11月09日ynamic LINQ如何创建高级查询服务

这篇文章将为大家详细讲解有关ynamic LINQ如何创建高级查询服务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

前言:

在业务开发中,一个常用的功能就是"高级查询",就是客户可以根据自己的需要设置查询条件查找数据,类似下图:

通常,我们需要为每个"高级查询"定制Dto类,用于传输条件,并要根据条件组合成查询语句执行数据库查询操作,费时费力。

现在,使用AutoFilterer.Generators可以轻松实现上述功能。

一、创建高级查询服务

举例:

创建Asp.Net Core Web API项目,引用Nuget包AutoFilterer.Generators。

WeatherForecast类上添加GenerateAutoFilterAttribute:

[GenerateAutoFilter]public class WeatherForecast{    public DateTime Date { get; set; }    public int TemperatureC { get; set; }    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);    public string Summary { get; set; }}

然后,修改WeatherForecastController.cs的Get方法,增加WeatherForecastFilter参数:

[HttpGet]:

public IEnumerable Get([FromQuery]WeatherForecastFilter filter){    var rng = new Random();    // Change range to 100 from 5 to get more reasonable results.    return Enumerable.Range(1, 100).Select(index => new WeatherForecast    {        Date = DateTime.Now.AddDays(index),        TemperatureC = rng.Next(-20, 55),        Summary = Summaries[rng.Next(Summaries.Length)]    })    .AsQueryable().ApplyFilter(filter)//使用filter    .ToArray();}

AutoFilterer.Generators提供了IQueryable.ApplyFilter(filter)扩展方法,可以根据高级查询条件进行数据筛选。

运行程序,可以在Swagger UI看到如下图:

现在,"高级查询"服务已经完成了。你可以传入最小最大值范围,排序方式,分页方式。

结论:

AutoFilterer.Generators提供了很便利的方式实现"高级查询",如果大家有类似的业务需求,可以试一下

但是,AutoFilterer.Generators只能提供简单的范围筛选:

今天,我们介绍如何使用Dynamic LINQ轻松实现更强大的高级查询服务。

二、使用Dynamic LINQ创建高级查询服务

举例:

创建ASP.NET Core Web API项目,引用Nuget包System.Linq.Dynamic.Core。

并在WeatherForecastController.cs头部添加:

using System.Linq.Dynamic.Core;

1.定义查询参数

创建DynamicLinqDto,用于传递返回字段、查询条件、排序方式、分页方式等:

public class DynamicLinqDto{    public string Fields { get; set; }    public string Filter { get; set; }    public string OrderBy { get; set; }            public int? PageNo { get; set; }    public int? PageSize { get; set; }}

2.实现查询方法

修改默认的Get方法如下:

[HttpGet]:

[ProducesDefaultResponseType(typeof(WeatherForecast))]public IEnumerable Get([FromQuery] DynamicLinqDto dto){    var rng = new Random();    IQueryable query = Enumerable.Range(1, 5).Select(index => new WeatherForecast    {        Date = DateTime.Now.AddDays(index),        TemperatureC = rng.Next(-20, 55),        Summary = Summaries[rng.Next(Summaries.Length)]    })    .AsQueryable();    return query.ToDynamicArray(dto);}

由于Get方法的返回类型是IEnumerable,因此需要使用ProducesDefaultResponseTypeAttribute指定实际返回的类型,以便Swagger页面能显示正确:

3.实现扩展方法

上面最关键的代码是ToDynamicArray方法。

实际上,这是我们封装的扩展方法,对于任意IQueryable对象,实现高级查询:

public static class DynamicLinqExtentions{    public static dynamic[] ToDynamicArray(this IQueryable query, DynamicLinqDto dto)    {        if (!string.IsNullOrWhiteSpace(dto.Fields))        {            query = query.Select($@"new({dto.Fields})");        }        if (!string.IsNullOrWhiteSpace(dto.Filter))        {            query = query.Where(dto.Filter);        }        if (!string.IsNullOrWhiteSpace(dto.OrderBy))        {            query = query.OrderBy(dto.OrderBy);        }        var pageNo = dto.PageNo ?? 1;        var pageSize = dto.PageSize ?? 10;        query = query.Page(pageNo, pageSize);        return query.ToDynamicArray();    }}

4.效果

运行程序,传入指定的参数并执行:

可以看到,现在,"高级查询"服务已经完成了:

关于"ynamic LINQ如何创建高级查询服务"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

查询 高级 方法 服务 查询服务 方式 条件 参数 数据 篇文章 业务 功能 实际 就是 更多 程序 类型 范围 项目 排序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 查询是从数据库的表中筛选 我的世界服务器拔刀怎么刷东西 机房服务器施工方案 重庆百信服务器厂家 数据库什么是信息符号表示 永兴软件开发培训 镜像管理服务器 闵行区网络安全 安全模式网络安全模式区别 博起宝软件开发工作室 有起床战争的mc国际服服务器 服务器异常请尝试重新登陆 怎么区分软件开发和销售 人工智能大数据网络安全 黄南共享设备软件开发 数据库update很慢 佛山象居互联网科技有限公司 三级计算机网络技术学院 应对网络安全的措施英语作文 鑫多宏软件开发有限公司 网络安全监察专业是什么 股票软件开发人员工资 深圳智能软件开发电话 用发展眼光看待网络安全审查办法 操作系统适合作为服务器操作系统 数据库使用空间 网络工程专业有软件开发吗 软件开发详细报价单 dell服务器电源改直流 具体软件开发流程图
0