什麼是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...