在业务开发中,一个常用的功能就是“高级查询”,就是客户可以根据自己的需要设置查询条件查找数据,类似下图:
通常,我们需要为每个“高级查询”定制dto类,用于传输条件,并要根据条件组合成查询语句执行数据库查询操作,费时费力。
现在,使用autofilterer.generators可以轻松实现上述白百合陈羽凡离婚功能。
举例:
创建asp.net core web api
项目,引用nuget包autofilterer.generators。
在weatherforecast
类上添加generateautofilterattribute
:
[generateautofilter]public class weatherforecast{ public datetime date { get; t; } public int temperaturec { get; t; } public int temperaturef => 32 + (int)(temperaturec / 0.5556); public string summary { get; t; }}
然后,修改weatherforecastcontroller.cs
的get方法,增加weatherforecastfilter
参数:
[httpget]:
public ienumerable<weatherforecast> get([fromquery]weatherforecastfilter filter){ var rng = new random(); // change range to 100 from 5 to get more reasonable results. return enumerable.range(1, 100).lect(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(fi群众路线教育活动lter)扩展方法,可以根据高级查询条件进行数据筛选。
运行程序,可以在swagger ui看到如下图:
现在,“高级查询”服务已经完成了。你可以传入最小最大值范围,排序方式,分页方式。
结论:
autofilterer.generators提供了很便利的方式实现“高级查询”,如果大家有类似的业务需求,可以试一下
但是,autofilterer.generators只能提供简单的范围筛选:
今天,我们介绍如何使用dynamic linq轻松实现更强大的高级查询服务。
举例:
创建asp.net core web api项目,引用nuget包system.linq.dynamic.core。
并在weatherforecastcontroller.cs头部添加:
using system.linq.dynamic.core;
创建dynamiclinqdto
,用于传递返回字段、查询条件、排序方式、分页方式等:
public class dynamiclinqdto{ public string fields { get; t; } public string filter { get; t; } public string orderby { get; t; } public int? pageno { get; t; } public int? pagesize { get; t; }}男人帮潇潇
修改默认的get方法如下:
[httpget]:
[producesdefaultrespontype毕业才说爱(typeof(weatherforecast))]public ienumerable<dynamic> get([fromquery] dynamiclinqdto dto){ var rng = new random(); iqueryable query = enumerable.range(1, 5).lect(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
,因此需要使用producesdefaultrespontypeattribute
指定实际返回的类型,以便swagger页面能显示正确:
上面最关键的代码是todynamicarray方法。
实际上,这是我们封装的扩展方法,对于任意iqueryable对象,实现高级查询:
public static class dynamiclinqextentions{ public static dynamic[] todynamicarray(this iqueryable query, dynamiclinqdto dto) { if (!string.isnullorwhitespace(忽见陌上杨柳色dto.fields)) { query = query.lect($@"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(); }}
运行程序,传入指定的参数并执行:
可以看到,现在,“高级查询”服务已经完成了:
结论:
可以看到dynamic linq linq 使实现起来相当容易,详细参数说明请参看官方文档
到此这篇关于ynamic linq创建高级查询服务的文章就介绍到这了,更多相关ynamic linq创建高级查询服务内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-06 03:38:43,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/83db56fb8aa52ed4ee64e3d2c828f107.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:ynamic LINQ创建高级查询服务.doc
本文 PDF 下载地址:ynamic LINQ创建高级查询服务.pdf
留言与评论(共有 0 条评论) |