.NET 現(xiàn)代化動(dòng)態(tài) LINQ 庫(kù) Gridify
https://alirezanet.github.io/Gridify/
這有什么用呢?LINQ 查詢通常是在程序中硬編碼的, 而字符串可以來(lái)自于數(shù)據(jù)庫(kù),Http 請(qǐng)求等等, 可以在合適的場(chǎng)景中轉(zhuǎn)換成LINQ查詢,也就是動(dòng)態(tài) LINQ。
讓我們看看下面幾個(gè)示例。
首先通過(guò) Nuget 安裝 Gridify, 然后修改代碼如下
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; }}
先看一個(gè)簡(jiǎn)單的, 此時(shí) p1 和 p2 是相等的
// 字符串var p1 = people.AsQueryable().ApplyFiltering("Age=18").ToList();//等同于 LINQvar p2 = people.Where(x => x.Age==18).ToList();
people.AsQueryable().ApplyFiltering("Name=Lee | Name=Mark").ToList();people.Where(x => x.Name=="Lee"|| x.Name=="Mark").ToList();
people.AsQueryable().ApplyFiltering("Age=18 , Name=James").ToList();people.Where(x => x.Age==18&& x.Name=="James").ToList();
模糊查詢
people.AsQueryable().ApplyFiltering("Name=*a").ToList();people.Where(x => x.Name.Contains("a")).ToList();
排序
people.AsQueryable().ApplyOrdering("Age desc,Name desc").ToList();;people.OrderByDescending(x => x.Age).ThenByDescending(x => x.Name).ToList();
性能
Gridify 是實(shí)現(xiàn)原理是, 對(duì)字符串進(jìn)行語(yǔ)法解析,然后轉(zhuǎn)換成表達(dá)式, 如您所見(jiàn),Gridify 的結(jié)果和原生 linq 最接近。

希望對(duì)您有用!
評(píng)論
圖片
表情
