我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ynamicLINQ创建高级查询服务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ynamicLINQ创建高级查询服务

前言:

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

通常,我们需要为每个“高级查询”定制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看到如下图: 

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

结论:

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<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页面能显示正确:

​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 LINQ 使实现起来相当容易,详细参数说明请参看官方文档

到此这篇关于ynamic LINQ创建高级查询服务的文章就介绍到这了,更多相关ynamic LINQ创建高级查询服务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ynamicLINQ创建高级查询服务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

MySQL中如何创建索引以提高查询性能

在MySQL中,可以使用CREATE INDEX语句来创建索引以提高查询性能。下面是一个示例:CREATE INDEX idx_lastname ON customers(last_name);这将在名为"customers"的表的"la
MySQL中如何创建索引以提高查询性能
2024-04-09

用PythonFlask创建简洁高效的URL短链接服务

本文介绍了如何使用PythonFlask框架创建URL短链接服务。通过详细的步骤和代码示例,读者将学会如何搭建一个高效的URL缩短服务,包括生成短链接、重定向、还原长链接等功能。本文还介绍了如何使用Redis数据库实现短链接的存储和管理和如何优化短链接的访问速度和可靠性
2023-05-17

掌握Node.js Koa:创建高效、可靠的Web服务器

Node.js Koa是一个轻量级且高性能的Web框架,它提供了丰富的功能和中间件支持,能够帮助您创建高效、可靠的Web服务器或应用。
掌握Node.js Koa:创建高效、可靠的Web服务器
2024-02-08

MySQL中怎么结合循环与子查询解决高级业务问题

在MySQL中,可以结合循环与子查询来解决一些高级业务问题。以下是一个示例,展示如何使用循环和子查询来解决一个类似于累加的问题:假设有一个表sales,包含销售记录,其中有id、amount和date字段,现在要计算每个月的销售总额,可以
MySQL中怎么结合循环与子查询解决高级业务问题
2024-04-29

如何为网站构建自己的Aleax查询服务

这篇文章主要为大家展示了“如何为网站构建自己的Aleax查询服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何为网站构建自己的Aleax查询服务”这篇文章吧。1. Alexa介绍Alexa
2023-06-16

域名查询与阿里云服务器构建可靠且安全的网络服务

随着互联网的快速发展,域名已经成为企业和个人在互联网上展示自我、推广业务的重要标识。而阿里云作为国内领先的云计算服务提供商,提供了丰富的域名解析和服务器托管解决方案。本文将介绍如何通过阿里云服务器来实现域名查询,并探讨其优势和应用案例。详细说明:1.域名查询的重要性域名是互联网上的重要标识,对于企业来说,一个易记
域名查询与阿里云服务器构建可靠且安全的网络服务
2023-12-31

阿里云ECS构建安全高效的企业级云服务器环境

阿里云ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,可以帮助企业轻松构建和管理高可用、弹性扩展的计算平台。本文将详细介绍阿里云ECS的目录结构,以及如何使用这些目录进行有效的管理和维护。阿里云ECS目录结构:/etc:包含系统配置文件,如配置文件、系统日志等。/var:包含系
阿里云ECS构建安全高效的企业级云服务器环境
2023-12-17

阿里云服务器A区构建安全、高效的企业级计算环境

阿里云服务器A区是阿里云推出的一款高性能、安全稳定的企业级云计算服务,适用于企业级应用、高并发网站、大数据处理、人工智能等场景。阿里云服务器A区以其高可用性、高性能、低成本和高安全性,为企业提供了高效稳定的计算环境。详细说明:高可用性:阿里云服务器A区采用了分布式计算架构,可以实现多个节点的并行计算,提高计算效率
阿里云服务器A区构建安全、高效的企业级计算环境
2023-11-04

阿里云服务器交流——构建高效稳定的企业级应用

阿里云服务器交流是阿里云推出的一个交流平台,旨在为企业级应用提供全面的解决方案和技术支持。本文将详细介绍阿里云服务器交流的各种优势和特点,以及如何通过该平台获得更好的服务器使用体验。阿里云服务器交流是一个集服务器购买、使用、管理、交流于一体的综合性服务平台。该平台提供了一系列的服务,包括阿里云服务器的购买、设置、
阿里云服务器交流——构建高效稳定的企业级应用
2023-11-06

服务器操作系统标准化:让IT系统像乐高积木一样,随心所欲地搭建出各种创新应用!

服务器操作系统标准化能够让IT系统像乐高积木一样,随心所欲地搭建出各种创新应用,从而提高IT系统的灵活性与扩展性。
服务器操作系统标准化:让IT系统像乐高积木一样,随心所欲地搭建出各种创新应用!
2024-02-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录