2009-12-13 37 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而不是整个可空,因为可以为空的布尔值不能分配给布尔变量。

您的代码没有透露足够的信息,以便能够判断此答复是否与此处相关,但我猜这可能是您问题的真正原因。如果不是(或实际上即使是这样),其他人回答的情况通常也是如此。

相关问题