從Lambda表示式到Linq查詢

2021-06-21 05:47:03 字數 2047 閱讀 1752

lambda表示式

lamda表示式是一種匿名函式(沒有函式名),使用方式

輸入引數=>表示式或語句塊

僅當 lambda 只有乙個輸入引數時,括號才是可選的;否則括號是必需的。

如:(x, y) => x == y

顯示指定型別:

(int x, string s) => s.length > x

非同步lamda:

button1.click += async (sender, e) =>

;

lamda中的型別推理:

通過推斷來確定lamda表示式的輸入引數的型別和返回值

lambda 的一般規則如下:

舉例:

customers.where(c => c.city == "london");

通過c.city == "london"來推斷出最終c的型別。

linq

linq是使用c#語法進行的強型別查詢語言,目的是提供統一對稱的方式,在廣義的資料上得到資料和運算元據

好處:可以進行多種資料形式的查詢,如sql,xml

linq應用場景

舉例:linq to object

string strs = ;

ienumerablesubset = from str in strs

where str.contains(" " )

orderby str

select str;

foreach (string s in subset)

console.writeline("item:" , s);

console.readline();

結果集由實現了ienumberable的物件表示,在這個例子中t為string

實際上查詢的函式都是由ienumberable中的函式(被子類過載後)來幫助我們實現的

簡便方法:使用隱式型別

var subset = from str in strs
linq的操作只有在迭代查詢結果的時候才執行,這種功能叫做延遲執行

轉換結果集:

from+名字in和select+名字

from item in container,select item

item是從container中查詢的元素,可以起任意的名字,select是最終選擇的內容

使用enumerable型別和lamda表示式建立查詢

linq to object中的一些功能可以使用enumerable物件(可以理解為資料容器)的擴充套件方法來訪問。

如呼叫enumerable.where()方法

public static ienumerablewhere (this ienumerablesource,system.funcpredicate)

其中func<>是乙個泛型委託,接受一定的引數,通過把寫好的匿名函式(lamda表示式)作為引數傳入,就可以執行查詢邏輯了

使得查詢語句寫法更加簡便

var subset = strs.where(str => str.contains( " "));

str相當於from str in strs

str.contains(

" "))相當於執行where的條件判斷

varsubset = strs.where(str => str.contains(

" ")).orderby(str=>str).select(str=>str);

ps:這種方法不過是linq查詢語句的簡記版本而已

linq表示式對比lambda表示式

什麼是linq表示式?什麼是lambda表示式?前一段時間用到這個只是,在網上也沒找到比較簡單明瞭的方法,今天就整理了一下相關知識,有空了再仔細研究研究 public program ling表示式 var stus1 from s in allstudent where s.name 王二 sel...

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 後期版本中...