2009-12-13 79 views

回答

3

第一個(select(a => a))是多餘的 - 它沒有做任何事情。

第二個(select(a => a.value)被稱爲投影。它將a(不管那是什麼)的列表投影到其值的列表中。你還沒有告訴我們什麼a或它的價值是什麼,但它看起來像一個領域或財產...

0

無論何時只想訪問對象「a」的「value」屬性,您都需要第二個參數。

1

選擇將給定函數應用於集合中的所有值。

a => a因此將元素映射到自身,因此不具有任何效果。

a => a.value將每個元素映射到它的value屬性。

0

你已經收到了一些相當穩固的答覆,我不會與其他人爭論答案,他們很好,但我想在這裏嘗試一種不同的方法。

如果你真的沒有注意到選擇任何對象和選擇任何對象的屬性之間的區別 - 這是一個根本性的區別 - 我懷疑你的a可能是Nullable<T>。我懷疑這一點,因爲如果a可以爲空,很多時候你可以互換使用aa.Value,並且可能不會注意到其中的差異。

A Nullable<T>將不可空的類型包裝成可以爲null的類。獲取並設置此屬性的值不會直接分配包裝類,但它實際上將分配(或獲取)值到其屬性。 A Nullable<T>也帶有布爾屬性HasValue

如果您的數據庫包含一個位字段,並且該位字段恰好允許空值,那麼Linq to SQL(比如說)會將其映射到Nullable<bool>(簡寫,bool?)。如果您的表允許空,但實際上從未包含任何空值,你可能不會注意到.Select(myNullableBool => myNullableBool)之間的差別(這是,正如有人所指出的,冗餘),並.Select(myNullableBool => myNullableBool.Value),但區別就在這裏實際上是後者返回IEnumerable<bool>,而前者返回IEnumerable<Nullable<bool>>。後者假設bool將會有一個值,所以如果你想玩的安全,你應該做.Where(mNB => mNB.HasValue).Select(mNB => mNB.Value)(也有一個GetValueOrDefault方法,你可以在你的選擇中使用)。如果標誌的空值在你的模型中沒有意義,那麼它的數據類型應該是布爾值,而不是可空的布爾值。在這種情況下,您要確保選擇.Value而不是整個可空,因爲可以爲空的布爾值不能分配給布爾變量。

您的代碼沒有透露足夠的信息,以便能夠判斷此答覆是否與此處相關,但我猜這可能是您問題的真正原因。如果不是(或實際上即使是這樣),其他人回答的情況通常也是如此。