返回顶部
首页 > 资讯 > 精选 >ynamic LINQ如何创建高级查询服务
  • 414
分享到

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

2023-06-29 11:06:45 414人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关ynamic LINQ如何创建高级查询服务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:在业务开发中,一个常用的功能就是“高级查询”,就是客户可以根据自己的需要

这篇文章将为大家详细讲解有关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<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).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看到如下图: 

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

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

结论:

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

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

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

今天,我们介绍如何使用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<dynamic> 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页面能显示正确:

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

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如何创建高级查询服务

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

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

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

--结束END--

本文标题: ynamic LINQ如何创建高级查询服务

本文链接: https://lsjlt.com/news/324737.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ynamic LINQ如何创建高级查询服务
    这篇文章将为大家详细讲解有关ynamic LINQ如何创建高级查询服务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:在业务开发中,一个常用的功能就是“高级查询”,就是客户可以根据自己的需要...
    99+
    2023-06-29
  • ynamicLINQ创建高级查询服务
    目录前言:一、创建高级查询服务二、使用DynamicLINQ创建高级查询服务​1.定义查询参数​​2.实现查询方法​​3.实现扩展方法​​4.效果​前言: 在业务开发中,一个常用的功...
    99+
    2024-04-02
  • MySQL中如何创建索引以提高查询性能
    在MySQL中,可以使用CREATE INDEX语句来创建索引以提高查询性能。下面是一个示例: CREATE INDEX idx_l...
    99+
    2024-04-09
    MySQL
  • Oracle管理:如何创建查询用户
    标题:Oracle管理:如何创建查询用户,需要具体代码示例 在Oracle数据库管理中,创建查询用户是一个常见的操作。查询用户是一个拥有只读权限的用户,可以查看数据库中的数据,但不能进...
    99+
    2024-03-03
    查询 oracle 创建
  • mysql如何根据查询结果创建表
    要根据查询结果创建表,可以使用SELECT INTO语句来实现。以下是一个示例: CREATE TABLE new_tabl...
    99+
    2024-04-22
    mysql
  • mysql如何查询事务隔离级别
    这篇“mysql如何查询事务隔离级别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysq...
    99+
    2024-04-02
  • mongo如何查询慢日志以及创建索引
    这篇文章给大家分享的是有关mongo如何查询慢日志以及创建索引的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.查看mongodb慢日志是否开起use LogDB;db.getP...
    99+
    2024-04-02
  • 如何在MySQL中创建、删除和查询索引
    如何在MySQL中创建、删除和查询索引?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。熟悉使用MySQL命令可以方便灵活地执行各种数据库操作...
    99+
    2024-04-02
  • 我们如何使用子查询创建 MySQL 视图?
    为了说明如何使用子查询创建 MySQL 视图,我们使用“Cars”表中的以下数据 -mysql> select * from cars; +------+--------------+---------+ | ID | ...
    99+
    2023-10-22
  • 如何创建WebSocket服务端
    这篇文章主要介绍“如何创建WebSocket服务端”,在日常操作中,相信很多人在如何创建WebSocket服务端问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何创建WebSocket服务端”的疑惑有所帮助!...
    99+
    2023-06-19
  • C#如何创建Windows服务
    小编给大家分享一下C#如何创建Windows服务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C#创建Windows服务(Windows Services)Win...
    99+
    2023-06-18
  • vps服务器如何创建
    创建VPS服务器的步骤如下:1. 选择合适的VPS提供商:根据自己的需求选择一个可靠的VPS提供商。2. 注册并购买VPS:在选择的...
    99+
    2023-09-14
    vps vps服务器
  • 如何创建云服务器
    创建云服务器需要以下步骤: 确定所需的云服务器类型:选择您需要的云服务器(例如Amazon AWS或Google Cloud Cloud),并根据您的业务需求选择合适的服务提供商。您可以查看不同云服务器的价格和可用性。 选择适当的云服务...
    99+
    2023-10-26
    服务器
  • 如何为网站构建自己的Aleax查询服务
    这篇文章主要为大家展示了“如何为网站构建自己的Aleax查询服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何为网站构建自己的Aleax查询服务”这篇文章吧。1. Alexa介绍Alexa ...
    99+
    2023-06-16
  • 在一个千万级的数据库查寻中,如何提高查询效率????
    摸清数据产生量如何,如果是1钞钟1条记录,则一台车一天就有86400条记录,则建议如下: 每台车使用单独的表,程序内部使用CreateTable,动态创建表,销毁表。这样车与车之间不会产生联系。 前提:系统管理的车应该不会经常变...
    99+
    2014-10-15
    在一个千万级的数据库查寻中,如何提高查询效率????
  • NodeJS如何创建HTTP服务器
    小编给大家分享一下NodeJS如何创建HTTP服务器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!引子var http...
    99+
    2024-04-02
  • linux中如何创建redis服务
    linux中创建redis服务的方法:找下redis的官方的下载地址,如:http://download.redis.io/releases/redis-3.2.8.tar.gz在linux终端,输入命令:“wget http://down...
    99+
    2024-04-02
  • WMI如何创建系统服务
    这篇文章主要介绍WMI如何创建系统服务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:Const OWN_PROCESS = &H10Const ERR_CONTROL = &H2Const ...
    99+
    2023-06-08
  • Hive中如何创建和使用索引来优化查询性能
    在Hive中创建和使用索引可以帮助优化查询性能。以下是在Hive中创建和使用索引的步骤: 创建索引:在Hive中创建索引需要使用C...
    99+
    2024-03-12
    Hive
  • cdn服务提供商如何查询
    查询cdn服务提供商的方法首先,在浏览器中搜索“网站cdn服务器查询”,或进入“tools.bugscaner.com”网站;在网站“在线工具”栏中,查找到“在线网站cdn服务商查询识别”,并进入;最后,在线网站cdn服务商查询识别页面中,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作