C# Lambda表示式和linq表示式 之 匿名物件查詢接收

學習中的苦與樂發表於2019-01-18

很多小夥伴都用過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”]
};

看了上面的是不是突然覺得茅塞頓開,他的不同點只是匿名物件的列名和實體的列名獲取方式不一樣罷了。

小夥伴們快去試試吧!發現更多應用可以留言討論哦^_^

 

相關文章