C# 元素之间的Linq差异,元素.value

C# 元素之间的Linq差异,元素.value,c#,linq,C#,Linq,两者的区别是什么 选择(a=>a)并选择(a=>a.value)。我在哪里需要第二个呢?只要您想单独访问对象“a”的“value”属性,就需要第二个。只要您想单独访问对象“a”的“value”属性,就需要第二个。选择将给定函数应用于集合中的所有值 a=>a因此将一个元素映射到自身,因此没有任何效果 a=>a.value将每个元素映射到其value属性。选择将给定函数应用于集合中的所有值 a=>a因此将一个元素映射到自身,因此没有任何效果 a=>a.value将每个元素映射到它的value属性。第

两者的区别是什么
选择(a=>a)并选择(a=>a.value)
。我在哪里需要第二个呢?

只要您想单独访问对象“a”的“value”属性,就需要第二个。

只要您想单独访问对象“a”的“value”属性,就需要第二个。

选择将给定函数应用于集合中的所有值

a=>a
因此将一个元素映射到自身,因此没有任何效果


a=>a.value
将每个元素映射到其
value
属性。

选择将给定函数应用于集合中的所有值

a=>a
因此将一个元素映射到自身,因此没有任何效果

a=>a.value
将每个元素映射到它的
value
属性。

第一个(
select(a=>a)
)是多余的-它实际上什么都不做

第二个(
select(a=>a.value
)称为投影(投影)。它将
a
(无论是什么)的列表投影到其值的列表中。您没有告诉我们
a
或其值是什么,但它看起来像一个字段或属性…

第一个(
select(a=>a)
)是多余的-它实际上什么都不做


第二个(
select(a=>a.value
)称为投影。它投影一个
a
列表(无论是什么)你还没有告诉我们什么是
a
或它的值,但它看起来像一个字段或属性…

你已经收到了一些非常可靠的答复,我不打算与其他答案争论,它们很好,但我想在这里尝试不同的方法

如果你真的没有注意到选择任何对象和选择任何对象上的任何属性之间的区别——这是一个非常基本的区别——我怀疑你的
a
可能是一个
null
。我怀疑这一点,因为如果
a
是null,很多时候你都可以使用ode>a和
a.Value
可以互换,并且可能不会注意到差异

Nullable
将不可为null的类型包装到可以为null的类中。获取并设置此属性的值不会直接分配包装类,但它实际上是在分配(或获取)它的
value
属性的值。
Nullable
还附带一个布尔属性
HasValue

如果您的数据库包含一个位字段,比如说,而该位字段恰好允许空值,那么Linq to SQL(比如)将把它映射到一个
可空的
(简写为
bool?
)。如果您的表允许空值,但实际上从未包含任何空值,则您可能不会注意到
之间的差异。选择(myNullableBool=>myNullableBool)
(正如有人指出的,这是多余的)和
。选择(myNullableBool=>myNullableBool.Value)
,但这里的区别实际上是后者返回一个
IEnumerable
,而前者返回
IEnumerable
。后者假设bool将有一个值,因此如果您想安全起见,应该执行
。其中(mNB=>mNB.HasValue)。选择(mNB=>mNB.value)
(还有一个
GetValueOrDefault
方法可用于选择)。如果标志的空值在您的模型中没有意义,则其数据类型应为布尔值,而不是可为空的布尔值。在这种情况下,您要确保选择了
。value
,而不是整个可为空的值,因为不能将可为空的布尔值指定给布尔变量


您的代码没有显示足够的信息,无法判断此回复是否与此处相关,但我猜这可能是您问题的真正原因。如果不是(或者实际上是),其他人的回答大体上仍然是正确的。

你已经收到了一些非常可靠的回答,我不想与其他答案争论,它们很好,但我想尝试一种不同的方法

如果你真的没有注意到选择任何对象和选择任何对象上的任何属性之间的区别——这是一个非常基本的区别——我怀疑你的
a
可能是一个
null
。我怀疑这一点,因为如果
a
是null,很多时候你都可以使用ode>a
a.Value
可以互换,并且可能不会注意到差异

Nullable
将不可为null的类型包装到可以为null的类中。获取并设置此属性的值不会直接分配包装类,但它实际上是在分配(或获取)它的
value
属性的值。
Nullable
还附带一个布尔属性
HasValue

如果您的数据库包含一个位字段,比如说,而该位字段恰好允许空值,那么Linq to SQL(比如)将把它映射到一个
可空的
(简写为
bool?
)。如果您的表允许空值,但实际上从未包含任何空值,则您可能不会注意到
之间的差异。选择(myNullableBool=>myNullableBool)
(正如有人指出的,这是多余的)和
。选择(myNullableBool=>myNullableBool.Value)
,但这里的区别实际上是后者返回一个
IEnumerable
,而前者返回
IEnumerable
。后者假设bool将有一个值,因此如果您想安全起见,应该执行
。其中(mNB=>mNB.HasValue)。选择(mNB=>mNB.value)
(还有一个
GetValueOrDefault
方法可以在Select中使用)。如果标志的空值在模型中没有意义,那么它的数据类型应该是布尔值,并且