linq表示式對比lambda表示式

2021-08-17 09:33:44 字數 3421 閱讀 6030

什麼是linq表示式?什麼是lambda表示式?

前一段時間用到這個只是,在網上也沒找到比較簡單明瞭的方法,今天就整理了一下相關知識,有空了再仔細研究研究

public

program()

;//ling表示式

var stus1 = from s in allstudent

where s.name == "王二"

select

new ;

//lanmbda表示式

var stus2 = allstudent.where(t => t.name == "王二").select(t => new );

}public

class student

public

int age

public

student(string name, int age)

}lambda確實比linq表示式更加優雅

linq表示式的select不能省略

//linq

var students1 = from t in db.students

where t.name == "張三"

select t;

//lambda

var students2 = db.students

.where(t => t.name == "張三");

linq表示式必須需要括號包裹起來才能取結果集

//linq

var students1 = (from t in db.students

where t.name == "張三"

select t).tolist();

//lambda

var students2 = db.students

.where(t => t.name == "張三")

.tolist();

什麼時候使用linq?

通過上面的對比,好像linq一文不值了。no,不是這樣的。

比如下面幾種情況我們就可以選擇使用linq:

例一:(本例適用於linq to object 和 沒有建主外來鍵的ef查詢)

lambda中的join需要傳四個引數表示式,是不是有點暈了。。。

var list1 =

new dictionary<

string, string

> , , , };

var list2 =

new dictionary<

string, string

> , , , };

//linq

var obj1 = from l1 in list1

join l2 in list2

on l1.key equals l2.key

select

new ;

//lambda

var obj = list1.

join(list2, l1 => l1.key, l2 => l2.key, (l1, l2) =>

new );

例二:

//linq

var obj1 = from l1 in list1

join l2 in list2

on l1.key equals l2.key

orderby l1.key, l2.key descending

select new ;

//lambda

var obj = list1.join(list2, l1 => l1.key, l2 => l2.key, (l1, l2) => new )

.orderby(li => li.l1.key)

.thenbydescending(li => li.l2.key)

.select(t => new );

linq的話更接近sql語言

聯接查詢(內聯、左聯、交叉聯)

關於聯接查詢使用linq會更合適一些這個上面已經說了。

接下來我們寫內聯、左聯、交叉聯的linq和對應的lambda**。(目的:可能有些人不會,同時在這裡也給自己做個備忘)

內聯:

var list1 =

new dictionary<

string, string

> , , , };

var list2 =

new dictionary<

string, string

> , , , };

//linq查詢

var ojb2 = (from l1 in list1

join l2 in list2

on l1.key equals l2.key

select

new ).tolist();

//lambda查詢

var obj = list1.

join(list2, l1 => l1.key, l2 => l2.key, (l1, l2) =>

new ).tolist();

左聯:

var list1 =

new dictionary<

string, string

> , , , };

var list2 =

new dictionary<

string, string

> , , , };

//linq查詢

var ojb2 = (from l1 in list1

join l2 in list2

on l1.key equals l2.key into

list

from l2 in

list

.defaultifempty()

select

new ).tolist();

//lambda查詢

var obj = list1.groupjoin(list2, l1 => l1.key, l2 => l2.key, (l1, l2) =>

new ).tolist();

交叉聯:

var list1 = new dictionary , , ,  };

var list2 = new dictionary , , , };

//linq查詢

var ojb2 = (from l1 in list1

from l2 in list2

select

new ).tolist();

//lambda查詢

var obj = list1.selectmany(l1 => list2.select(l2 => new )).tolist();

原文:

LINQ和Lambda表示式

前段時間接觸了一種新的表示式,但是不知道這個是什麼意思,所以就先站在巨人的肩膀用了,現在聽師哥說這種寫法是 lambda 表示式。我一直以為,這個 lambda 表示式和 linq 查詢有異曲同工之妙,可惜,這樣想就大錯特錯了。定義語言整合查詢 language integrated query 允...

LINQ與Lambda表示式

是微軟提出的一項新技術 能將查詢功能直接引入到.net framwork所支援的程式語言中。查詢操作可以通過程式語言自身來傳達,而不用以字串形式嵌入到 中。主要包括linq to sql,linq to dataset,linq to objects和linq to xml4種技術。在c 後期版本中...

關於LINQ 和lambda表示式

一linq 既可以實現過濾資料 和lambda一樣 也可以實現查詢其他型別資料的功能 linq表示式的from行可以巢狀 實現表多層關聯一層層向下找的目的 注意一對一還是一對多的對應關係 容易亂 別把上層過濾掉的內容又關聯回來了 過濾完要tolist 不然是iqueryable型別 var acti...