List<int> result1 =
(from number in list where number < 3 select number).ToList();
List<int> result2 = list.Where(n => n<3).ToList();
什麼是這兩個不同的語句之間的區別?這兩個陳述有什麼區別?
List<int> result1 =
(from number in list where number < 3 select number).ToList();
List<int> result2 = list.Where(n => n<3).ToList();
什麼是這兩個不同的語句之間的區別?這兩個陳述有什麼區別?
第一符號通常被稱爲「查詢語法」,第二個「方法的語法」(或點符號,或λ語法) - 兩者都編譯成完全相同的代碼,但如已經通常提到的一個兩個更簡潔,大多數情況下這是點符號,但特別是對多個枚舉進行連接或分組時,查詢語法真的很明顯。
還檢查了LINQ Query Syntax versus Method Syntax (C#):
大多數查詢在介紹LINQ 文檔通過使用引入C#3.0的聲明 查詢語法寫成查詢 表達式。 但是,.NET公共語言運行庫 (CLR)本身沒有任何查詢 語法概念。因此,在 編譯時,查詢表達式是 轉換爲CLR 明白的方法:方法調用。這些 方法稱爲標準查詢 運算符,並且它們具有名稱,如 其中,Select,GroupBy,Join,Max, Average等等。您可以直接使用方法語法 而不是查詢語法將它們稱爲 。
一般來說,我們推薦查詢語法 ,因爲它通常比較簡單,而且更具可讀性;然而,在方法語法和 查詢語法之間沒有語義差異。
沒什麼。
第一個使用LINQ符號,而第二個使用擴展方法的符號 - 他們都做同樣的事情。
使用任何看起來更加賞心悅目給你。 :)
沒有區別。一種只是一種類似於SQL的語言擴展,而不是使用委託來實現相同的結果。
你已經注意到第一是LINQ符號,第二個使用擴展方法與拉姆達。使用第二個代碼來維護更少的代碼。但如果您認爲內部代碼或性能的相似性,只需使用秒錶並運行此代碼100000次並選擇最快的代碼。如果編譯的代碼是相似的,你會得到幾乎相同的時間。