很多小伙伴都用過Lambda表達式和linq表達式,用起來也得心應手,但是有的小伙伴 對匿名對象的查詢與接收比較迷茫,(沒有定義相應的實體),怎麼在where()裡面進行 條件篩選呢?常規用法我就不說了,我們來說一下匿名對象怎麼操作。 我們先看一下Lambda表達式的形式: 然後用過Dictiona ...
很多小伙伴都用過Lambda表達式和linq表達式,用起來也得心應手,但是有的小伙伴
對匿名對象的查詢與接收比較迷茫,(沒有定義相應的實體),怎麼在where()裡面進行
條件篩選呢?常規用法我就不說了,我們來說一下匿名對象怎麼操作。
我們先看一下Lambda表達式的形式:
Lambda表達式 | 說明 |
x=>x*x | 返回參數值的平方 |
x=>{return x*x;} | 返回參數值的平方。主體是語句塊 |
int(x)=>x/2 | 返回參數值除以2的結果 |
{}=>folder.StopFolding(0) | 調用一個方法,表達式不獲取參數。表達式可能會、也可能不會返回值 |
(x,y)=>{x++;return x/y;} | 多個參數,編譯器自己推導參數類型。參數x是以值得形式傳遞的,所以+ +操作的效果是局部於表達式 |
(ref int x,y){X++;returnx/y;} | 多個 參數,都顯示指定類型。參數x的類型是以引用的形式傳遞的,所以+ +操作的效果是永久性的 |
然後用過Dictionary<>的童鞋都知道,它的迴圈取值是 item["列名"],那麼我們也可以使用這種方式
進行操作,且看如下代碼:
List<Dictionary<string, object>> Listdict = new List<Dictionary<string, object>>();
Dictionary<string, object> dict1 = new Dictionary<string, object>();
dict1.Add("Id", 1);
dict1.Add("name", "老大");
dict1.Add("avg", 5);
Listdict.Add(dict1);
Dictionary<string, object> dict2 = new Dictionary<string, object>();
dict2.Add("Id", 2);
dict2.Add("name", "老二");
dict2.Add("avg", 10);
Listdict.Add(dict2);
Dictionary<string, object> dict3 = new Dictionary<string, object>();
dict3.Add("Id", 3);
dict3.Add("name", "老三");
dict3.Add("avg", 20);
Listdict.Add(dict3);
Dictionary<string, object> dict4 = new Dictionary<string, object>();
dict3.Add("Id", 3);
dict3.Add("name", "老四");
dict3.Add("avg", 30);
Listdict.Add(dict4);
//1:查詢Id等於2的用戶
//Lambda表達式(與Lambda表達式相關的整條語句稱作什麼呢?在微軟並沒有給出官方的命名,在《深入理解C#》中稱為點標記)。
var temp = Listdict.Where(it => { return Convert.ToInt32(it["Id"]) == 2; }).ToList();
//2:查詢avg大於9的和
//Lambda表達式(與Lambda表達式相關的整條語句稱作什麼呢?在微軟並沒有給出官方的命名,在《深入理解C#》中稱為點標記)。
var temp2 = Listdict.Where(it => { return Convert.ToInt32(it["avg"]) > 9; }).Sum(it => Convert.ToInt32(it["avg"]));
//linq表達式 (查詢表達式)
var temp3 = (from it in Listdict where Convert.ToInt32(it["avg"]) > 9 select Convert.ToInt32(it["avg"])).Sum();
//3、排序
Listdict = Listdict.OrderByDescending(it => Convert.ToInt32(it["Id"])).ToList();
//聯接(這裡只展示內聯接)Join
var temp5 = from a in Listdict
join b in Listdict
on a["Id"] equals b["Id"]
select new
{
Id = a["Id"],
Name = a["name"],
avg = a["avg"]
};
看了上面的是不是突然覺得茅塞頓開,他的不同點只是匿名對象的列名和實體的列名獲取方式不一樣罷了。
小伙伴們快去試試吧!發現更多應用可以留言討論哦^_^