我有一个列表中对象的可以为空的布尔属性,我想检查是否所有都相等并返回其值,如果有一个不相等的值,则返回null。
e.g。
Object1
string Name
bool? NullBool
Object1在列表中,例如List<Object1>
我只需要使用Linq检查并返回NullBool
我想做点什么
bool? returnVal = <my Linq / Function to get what I want>
答案 0 :(得分:3)
不漂亮,但是:
IEnumerable<Object1> objects = ...
var firstTwoDistinctValues = objects.Select(o => o.NullBool)
.Distinct()
.Take(2) // Early exit
.ToList();
var result = firstTwoDistinctValues.Count == 2
? null : firstTwoDistinctValues.SingleOrDefault();
现在这非常有效,因为:
此外,当源集合为空时,它将正常工作。
对于列表,您还可以有效地执行:
IList<Object1> objects = ...
var firstNullBool = objects.Select(o => o.NullBool).FirstOrDefault();
var result = objects.All(o => o.NullBool == firstNullBool) ? firstNullBool : null;
答案 1 :(得分:3)
var result = list.Select(elem => elem.NullBool).DefaultIfEmpty()
.Aggregate((acc, elem) => acc == elem ? acc : null);
答案 2 :(得分:0)
你是否正在考虑这个问题?
public static bool? CheckIfAllAreTheSame(List<Object1> bools)
{
if (bools.All(b => b.NullBool == true))
return true; // ... they are all true;
if (bools.All(b => b.NullBool == false))
return false;// ... they are all false
return null;// ... they are not all the same...
}
答案 3 :(得分:0)
var thing = (from x in objects where (x.NullBool.HasValue
&& x.NullBool.Value == whatever) select x).FirstOrDefault()