linq
和泛型型別
linq
查詢基於泛型型別,在
.net framework
的2.0
版中引入了泛型型別。您無需深入了解泛型即可開始編寫查詢。但是,您可能需要了解兩個基本概念: 1.
當您建立泛型集合類(如
list)>)
)的例項時,您將
「t」替換為列表將包含的物件的型別。例如,字串列表表示為
list
,customer
物件列表表示為
list
。泛型列表是強型別的,且提供了比將其元素儲存為
object
的集合更多的好處。如果您嘗試將
customer
新增到list
,則會在編譯時出現一條錯誤。泛型集合易於使用的原因是您不必執行執行時型別強制轉換。 2.
ienumerable)>)
是乙個介面,通過該介面,可以使用
foreach
語句來列舉泛型集合類。泛型集合類支援
ienumerable)>)
,就像非泛型集合類(如
arraylist
)支援ienumerable。
3.linq
查詢變數型別化為
ienumerable)>)
或派生型別,如
iqueryable)>)
。當您看到型別化為
ienumerable
的查詢變數時,這只意味著在執行該查詢時,該查詢將生成包含零個或多個
customer
物件的序列。
c#
ienumerablecustomerquery =
fromcustincustomers
wherecust.city ==
"london"
selectcust;
foreach(customer customerincustomerquery)
如果您願意,可以使用
var
關鍵字來避免使用泛型語法。var
關鍵字指示編譯器通過檢視在
from
子句中指定的資料來源來推斷查詢變數的型別。下面的示例生成與上乙個示例相同的編譯**:
c#
var customerquery2 =
fromcustincustomers
wherecust.city ==
"london"
selectcust;
foreach(var customerincustomerquery2)
當變數的型別明顯或顯式指定巢狀泛型型別(如由組查詢生成的那些型別)並不重要時,var
關鍵字很有用。通常,我建議如果您使用
var
,應意識到這可能使您的**更難以讓別人理解。
若要有效編寫查詢,您應該了解完整的查詢操作中的變數型別是如何全部彼此關聯的。如果您了解這些關係,就能夠更容易地理解文件中的
linq
示例和**示例。另外,還能了解在使用
var
隱式對變數進行型別化時的後台操作。
linq
查詢操作在資料來源、查詢本身及查詢執行中是強型別的。查詢中變數的型別必須與資料來源中元素的型別和
foreach
語句中迭代變數的型別相容。此強型別保證在編譯時捕獲型別錯誤,以便可以在使用者遇到這些錯誤之前更正它們。
為了演示這些型別關係,下面的大多數示例對所有變數使用顯式型別。
下圖演示不對資料執行轉換的
linq to objects
查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。
1.資料來源的型別引數決定範圍變數的型別。 2.
選擇的物件的型別決定查詢變數的型別。此處的
name
為乙個字串。因此,查詢變數是乙個
ienumerable。
3.在foreach
語句中迴圈訪問查詢變數。因為查詢變數是乙個字串序列,所以迭代變數也是乙個字串。
下圖演示對資料執行簡單轉換的
linq to sql
查詢操作。查詢將乙個
customer
物件序列用作輸入,並只選擇結果中的
name
屬性。因為
name
是乙個字串,所以查詢生成乙個字串序列作為輸出。
1.資料來源的型別引數決定範圍變數的型別。 2.
select
語句返回
name
屬性,而非完整的
customer
物件。因為
name
是乙個字串,所以
custnamequery
的型別引數是
string
,而非customer。
3.因為
custnamequery
是乙個字串序列,所以
foreach
迴圈的迭代變數也必須是
string。
下圖演示稍微複雜的轉換。select
語句返回只捕獲原始
customer
物件的兩個成員的匿名型別。
1.資料來源的型別引數始終為查詢中的範圍變數的型別。 2.
因為select
語句生成匿名型別,所以必須使用
var
隱式型別化查詢變數。 3.
因為查詢變數的型別是隱式的,所以
foreach
迴圈中的迭代變數也必須是隱式的。 4.
雖然您應該了解查詢操作中的型別關係,但是您也可以選擇讓編譯器為您執行全部工作。關鍵字
var
可用於查詢操作中的任何區域性變數。下圖與前面討論的第二個示例完全等效。唯一的區別是編譯器將為查詢操作中的各個變數提供強型別:
二 MVC之LINQ查詢語法
linq language integrated query 語言整合查詢是一組用於c 和visual basic語言的擴充套件。它允許編寫c 或者visual basic 以操作記憶體資料的方式,查詢資料庫。從技術角度而言,linq定義了大約40個查詢操作符,如select from in whe...
二 MVC之LINQ查詢語法
linq language integrated query 語言整合查詢是一組用於c 和visual basic語言的擴充套件。它允許編寫c 或者visual basic 以操作記憶體資料的方式,查詢資料庫。從技術角度而言,linq定義了大約40個查詢操作符,如select from in whe...
LINQ語法入門
所有的linq表示式都必須以乙個指定資料來源的from子句開頭,以乙個表示要獲取資料的select子句 或者乙個定義了查詢結果分組的group子句 結尾的。from子句指定查詢操作的資料來源和範圍變數,其中資料來源不但包括查詢本身的資料來源,而且還包括子查詢的資料來源。範圍變數一般用來表示源序列中的...