常州网站设计,面试网站建设的问题,关键字参数,上海市建设工程交易服务中心网站前言在以前的文章中#xff0c;我们介绍了使用AutoFilterer.Generators创建高级查询服务。但是#xff0c;AutoFilterer.Generators只能提供简单的范围筛选#xff1a;今天#xff0c;我们介绍如何使用Dynamic LINQ轻松实现更强大的高级查询服务。Demo创建ASP.NET Core Web… 前言在以前的文章中我们介绍了使用AutoFilterer.Generators创建高级查询服务。但是AutoFilterer.Generators只能提供简单的范围筛选今天我们介绍如何使用Dynamic LINQ轻松实现更强大的高级查询服务。Demo创建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 IEnumerabledynamic 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.效果运行程序传入指定的参数并执行:可以看到现在“高级查询”服务已经完成了结论可以看到Dynamic LINQ使实现起来相当容易。详细参数说明请参看官方文档https://dynamic-linq.net/想了解更多内容请关注我的个人公众号”My IO“