我有一个充满价值的DTO列表。我想检查所有DTO中的某个值是否相同,同时排除特定值。换句话说,我需要获取此列表的子集,然后检查所有值是否相等。
我最初尝试过
itemList.Where(x => x.status != 17).All(x => x.status == 15)
但是当列表中的所有DTO的状态= 17时,它正在评估为真。我想得到一个没有状态17的DTO子集,然后检查所有这些DTO的状态是否为15.什么是最好的方法吗?
答案 0 :(得分:2)
我相信您的要求是:
我相信可以用
完成bool ok = itemList
.Select( x => x.Status ) //Just look at statuses
.Where( x => x != 17) //Ignore 17
.Distinct() //Collapse to one element per status
.SingleOrDefault() //Make sure there is only one element
== 15; //Make sure the status is 15
答案 1 :(得分:1)
.All
检查是否没有无法满足条件的元素。所以它为空集返回true
。
如果我理解你的意图,你可以尝试
itemsList.Count(i => i.status != 17 && i.status != 15) > 0;
即。只需过滤掉所有的17和15,看看是否还剩下其他东西。
答案 2 :(得分:1)
听起来这个问题可能会对如何处理空集合感到困惑。我发现将源分区为子集合可以使任何决策都清晰。
var lookup = itemsList.ToLookup(x =>
x.Status == 17 ? "Exclude" :
x.Status == 15 ? "Include" :
"Trouble");
bool hasTrouble = lookup["Trouble"].Any();
bool hasInclude = lookup["Include"].Any();
bool hasOnlyGoodOnes = !hasTrouble && hasInclude;
var goodOnes = lookup["Include"].ToList();