我在列表中有一个对象的可空布尔属性,我想检查所有对象是否相等并返回其值,如果值不相等则返回null。
例如
Object1
string Name
bool? NullBool
Object1在列表中
List<Object1>
,我只需要使用Linq检查并返回NullBool
我想做类似的事情
bool? returnVal = <my Linq / Function to get what I want>
最佳答案
不漂亮,但是:
IEnumerable<Object1> objects = ...
var firstTwoDistinctValues = objects.Select(o => o.NullBool)
.Distinct()
.Take(2) // Early exit
.ToList();
var result = firstTwoDistinctValues.Count == 2
? null : firstTwoDistinctValues.SingleOrDefault();
现在这非常有效,因为:
此外,当source-collection为空时,它将正常工作。
对于列表,您还可以有效地执行以下操作:
IList<Object1> objects = ...
var firstNullBool = objects.Select(o => o.NullBool).FirstOrDefault();
var result = objects.All(o => o.NullBool == firstNullBool) ? firstNullBool : null;