首页 > 作文

ynamic LINQ创建高级查询服务

更新时间:2023-04-06 03:38:45 阅读: 评论:0

前言:

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

通常,我们需要为每个“高级查询”定制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轻松实现更强大的高级查询服务。

二、使用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; t; }  public string filter { get; t; }  public string orderby { get; t; }     public int? pageno { get; t; }  public int? pagesize { get; t; }}

男人帮潇潇

​2.实现查询方法​

修改默认的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页面能显示正确:

​3.实现扩展方法​

上面最关键的代码是​​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();  }}

​4.效果​

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

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

结论:

可以看到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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图