前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET 现代化动态 LINQ 库 Gridify

.NET 现代化动态 LINQ 库 Gridify

作者头像
全球技术精选
发布2021-12-20 15:53:13
5910
发布2021-12-20 15:53:13
举报
文章被收录于专栏:全球技术精选全球技术精选

动态 LINQ

大家好,我是等天黑, 这次继续介绍开源项目,Gridify 是一个现代化动态 LINQ 库,它以最简单的方式将您的字符串转换为 LINQ 查询,并且有出色的性能。它还提供了一种使用基于文本的数据应用过滤、排序和分页的简单方法,您还可以很方便的和 Entity framework 结合使用。

https://alirezanet.github.io/Gridify/

这有什么用呢?LINQ 查询通常是在程序中硬编码的, 而字符串可以来自于数据库,Http 请求等等, 可以在合适的场景中转换成LINQ查询,也就是动态 LINQ。

使用示例

让我们看看下面几个示例。

首先通过 Nuget 安装 Gridify, 然后修改代码如下

代码语言:javascript
复制
 public class Program
    {
        static async Task Main(string[] args)
        {
            List<Person> people = new List<Person>() {
                 new Person(18,"Lee"),
                 new Person(18,"James"),
                 new Person(30,"Mark") 
            }; 
        }
    } 
    public class Person
    {
        public Person(int age, string name)
        {
            Age = age;
            Name = name;
        }
        public int Age { get; set; }
        public string Name { get; set; } 
    }

先看一个简单的, 此时 p1 和 p2 是相等的

代码语言:javascript
复制
// 字符串
var p1 = people.AsQueryable().ApplyFiltering("Age=18").ToList();
//等同于 LINQ
var p2 = people.Where(x => x.Age==18).ToList(); 

OR

代码语言:javascript
复制
people.AsQueryable().ApplyFiltering("Name=Lee | Name=Mark").ToList();
people.Where(x => x.Name=="Lee"|| x.Name=="Mark").ToList();

AND

代码语言:javascript
复制
people.AsQueryable().ApplyFiltering("Age=18 , Name=James").ToList();
people.Where(x => x.Age==18&& x.Name=="James").ToList();

模糊查询

代码语言:javascript
复制
people.AsQueryable().ApplyFiltering("Name=*a").ToList();
people.Where(x => x.Name.Contains("a")).ToList();

排序

代码语言:javascript
复制
people.AsQueryable().ApplyOrdering("Age desc,Name desc").ToList();;
people.OrderByDescending(x => x.Age).ThenByDescending(x => x.Name).ToList();

性能

Gridify 是实现原理是, 对字符串进行语法解析,然后转换成表达式, 如您所见,Gridify 的结果和原生 linq 最接近。

希望对您有用!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 半栈程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模糊查询
  • 排序
  • 性能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档