開始使用 LINQ(四)- LINQ 查詢操作的類型關係 LINQ 查詢操作在數據源、查詢本身及查詢執行中是強類型的。查詢中變數的類型必須與數據源中元素的類型和 foreach 語句中迭代變數的類型相容。此強類型保證在編譯時捕獲類型錯誤,以便可以在用戶遇到這些錯誤之前更正它們。 一、不轉換源數據的查 ...
開始使用 LINQ(四)- LINQ 查詢操作的類型關係
LINQ 查詢操作在數據源、查詢本身及查詢執行中是強類型的。查詢中變數的類型必須與數據源中元素的類型和 foreach 語句中迭代變數的類型相容。此強類型保證在編譯時捕獲類型錯誤,以便可以在用戶遇到這些錯誤之前更正它們。
一、不轉換源數據的查詢
下圖演示不對數據執行轉換的 LINQ to Objects 查詢操作。源包含一個字元串序列,查詢輸出也是一個字元串序列。
- 數據源的類型參數決定範圍變數的類型。
- 選擇的對象的類型決定查詢變數的類型。此處的 name 為一個字元串。因此,查詢變數是一個 IEnumerable<字元串>。
- 在 foreach 語句中迴圈訪問查詢變數。因為查詢變數是一個字元串序列,所以迭代變數也是一個字元串。
二、轉換源數據的查詢
下圖演示對數據執行簡單轉換的 LINQ to SQL 查詢操作。查詢將一個 Customer 對象序列用作輸入,並只選擇結果中的 Name 屬性。因為 Name 是一個字元串,所以查詢生成一個字元串序列作為輸出。
- 數據源的類型參數決定範圍變數的類型。
- select 語句返回 Name 屬性,而非完整的 Customer 對象。因為 Name 是一個字元串,所以 custNameQuery 的類型參數是 string,而非Customer。
- 因為 custNameQuery 是一個字元串序列,所以 foreach 迴圈的迭代變數也必須是 string。
下圖演示另一種轉換。select 語句返回只捕獲原始 Customer 對象的兩個成員的匿名類型。
- 數據源的類型參數始終為查詢中的範圍變數的類型。
- 因為 select 語句生成匿名類型,所以必須使用 var 隱式類型化查詢變數。
- 因為查詢變數的類型是隱式的,所以 foreach 迴圈中的迭代變數也必須是隱式的。
三、讓編譯器推斷類型信息
您也可以選擇讓編譯器為您執行全部工作。關鍵字 var 可用於查詢操作中的任何局部變數。但是,編譯器為查詢操作中的各個變數提供強類型。