Linq表示式和Lambda表示式用法對比

2022-05-10 06:11:50 字數 3269 閱讀 1947

什麼是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 , , ,  };

var list2 = new dictionary , , , };

//linq

var obj1 = from l1 in

list1

join l2

inlist2

on l1.key equals l2.key

select

new;

//lambda

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

例二:lambda需要區分orderby、thenby有沒有覺得麻煩

//

linq

var obj1 = from l1 in

list1

join l2

inlist2

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 , , ,  };

var list2 = new dictionary , , , };

//linq查詢

var ojb2 = (from l1 in

list1

join l2

inlist2

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 , , ,  };

var list2 = new dictionary , , , };

//linq查詢

var ojb2 = (from l1 in

list1

join l2

inlist2

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();

from :

LINQ和Lambda表示式

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

關於LINQ 和lambda表示式

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

Linq語句和Lambda表示式

linq即語言整合查詢,是.net framework 3.5中新增的功能。其功能類似於資料庫中的sql語句 實際上linq就是針對.net framework的sql 提供標準的 易於學習的查詢和更新資料模式。從from開始 用過sql的朋友都知道,最簡單的sql語句select record f...