C#中利用Linq.Dynamic实现简单的动态表达式构建查询
生活随笔
收集整理的這篇文章主要介紹了
C#中利用Linq.Dynamic实现简单的动态表达式构建查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景介紹
在ADO.NET中我們可以根據用戶輸入的查詢條件拼接出指定的SQL語句進行查詢或者篩選出所需的數據,但是在ORM框架如EF中,我們一般用LINQ操作數據查詢,LINQ是否可以像SQL一樣拼接查詢條件呢?答案是可以的。這一技術叫Linq.Dynamic(動態Linq),Linq.Dynamic的出現解決了本人心中的疑惑,不然總感覺少了什么。不管怎么樣,我們首先要做的是去網上找各種大神的資料,本文參考如下幾篇資料:
Linq.Dynamic基本介紹1:https://www.cnblogs.com/myzony/p/9143692.html
Linq.Dynamic基本介紹2:https://blog.csdn.net/flyingdream123/article/details/79962525
另外Linq.Dynamic是由外國大神所創,源碼在其個人主頁上也有:源碼地址
首先,需要在NuGet程序包中引入Linq.Dynamic.Core并引用其命名空間才能使用。
其次,使用動態查詢必須先調用AsQueryable()方法。
static void Main(string[] args){List<Phone> PhoneLists = new List<Phone>(){new Phone { Country = "中國", City = "北京", Name = "小米" },new Phone { Country = "中國",City = "北京",Name = "華為"},new Phone { Country = "中國",City = "北京",Name = "聯想"},new Phone { Country = "中國",City = "臺北",Name = "魅族"},new Phone { Country = "日本",City = "東京",Name = "索尼"},new Phone { Country = "日本",City = "大阪",Name = "夏普"},new Phone { Country = "日本",City = "東京",Name = "松下"},new Phone { Country = "美國",City = "加州",Name = "蘋果"},new Phone { Country = "美國",City = "華盛頓",Name = "三星"},new Phone { Country = "美國",City = "華盛頓",Name = "HTC"}};var Lists = PhoneLists.AsQueryable().Where("Country = @0 And City = @1", "中國", "北京").OrderBy("Name,City").Select("new (Country as Country,City as City,Name as Name)");var dLists = Lists.ToDynamicList();foreach (var list in dLists){Console.WriteLine(list.Country + "-" + list.City + "-" + list.Name);}Console.Read();}運行效果如下圖所示:
?
當然也支持GroupBy()查詢,代碼如下:
static void Main(string[] args){List<Phone> PhoneLists = new List<Phone>(){new Phone { Country = "中國", City = "北京", Name = "小米" },new Phone { Country = "中國",City = "北京",Name = "華為"},new Phone { Country = "中國",City = "北京",Name = "聯想"},new Phone { Country = "中國",City = "臺北",Name = "魅族"},new Phone { Country = "日本",City = "東京",Name = "索尼"},new Phone { Country = "日本",City = "大阪",Name = "夏普"},new Phone { Country = "日本",City = "東京",Name = "松下"},new Phone { Country = "美國",City = "加州",Name = "蘋果"},new Phone { Country = "美國",City = "華盛頓",Name = "三星"},new Phone { Country = "美國",City = "華盛頓",Name = "HTC"}};var Lists = PhoneLists.AsQueryable().GroupBy("new (Country as Country,City as City)");var dLists = Lists.ToDynamicList();foreach (var list in dLists){Console.WriteLine(list + ":");foreach (var lis in list){Console.WriteLine(lis.Country + "-" + lis.City + "-" + lis.Name);Console.WriteLine($"{lis.Country} - {lis.City} - {lis.Name}");}}Console.Read();}執行效果如下圖所示:
希望對大家有所幫助!
?
總結
以上是生活随笔為你收集整理的C#中利用Linq.Dynamic实现简单的动态表达式构建查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Algorithm学习笔记 --- 迷宫
- 下一篇: java.lang.ClassNotFo