2010-01-21 53 views

回答

33

這真的等同於函數式語言映射。它被命名爲Select的原因是它被設計爲用作類似SQL的關鍵字的LINQ的一部分。

from item in collection 
where item.Value == someValue 
select item.Name 

被翻譯成:

collection.Where(item => item.Value == someValue) 
      .Select(item => item.Name) 

這將是一個有點矛盾,如果Select被評爲Map;例如:

collection.Filter(item => item.Value == someValue) 
      .Map(item => item.Name) 

事實上,很多人都沒有聽說過函數式編程就使用LINQ。對他們來說,LINQ是一種檢索數據對象並輕鬆查詢它們的方法(就像SQL查詢一樣)。對他們來說,SelectWhere非常合理。比MapFilter多得多。

+2

完整意義。如果我真的關心那麼多,我可以用擴展方法來包裝Where和Select。 – ChaosPandion 2010-01-22 00:57:25

+0

很好的答案。我實際上在沒有LINQ的情況下使用了「Select」,但它作爲LINQ表達式更清晰。 – willem 2010-07-23 08:06:58

+0

謝謝,很好的答案。從上下文來看,它沒有任何意義,但這有助於解釋它。 – nsantorello 2011-08-31 15:44:19

0

選擇最後一個主要原因之一是使智能感知工作。通過首先將序列的來源(來自語句),Intellisense可以正常工作。

+5

這與問題有什麼關係? – nawfal 2013-03-30 09:14:14

3

起初Select對我來說似乎也沒什麼困惑,但這只是時間問題。 Mehrdad告訴你Select的一個很好的理由。除此之外,我覺得Select更好地傳達了Linq的不變性方面。不是Map將意味着它正在改變原始結構,但Select說明它更清晰。它告訴你沒有觸摸原始列表,而只是從它中選擇來形成另一個列表。

它與其他命名以及Where一樣。當您致電collection.Filter時,它會告訴您一個想法,即您正在篩選特定收藏集,或者至少第一次。最後,這都是一個熟悉的問題。儘管一開始我對Linq的命名感到非常惱火,但現在我覺得MS團隊已經把它變得最正確了。

+0

+1表示「'Select」更清晰「。一個人不得不考慮SQL語法。 – nrodic 2014-05-29 23:06:14

相關問題