[英]How to fetch all the values in a List after a particular value using LINQ
[英]Check a list of DTOs using linq to see if all values that exclude a particular value all equal the same thing
我有一個填充值的DTO列表。 我想檢查所有DTO中的某個特定值是否相同,而排除特定值。 換句話說,我需要獲取此列表的一個子集,然后檢查所有值是否相等。
我最初嘗試
itemList.Where(x => x.status != 17).All(x => x.status == 15)
但是,當列表中所有DTO的狀態都為17時,它的評估為true。我想獲取不具有狀態17的DTO的子集,然后檢查所有這些DTO的狀態是否為15。去做?
我相信您的要求是:
我相信可以做到
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
.All
檢查是否有不滿足條件的元素。 因此對於空集返回true
。
如果我理解您的意圖正確,則可以嘗試
itemsList.Count(i => i.status != 17 && i.status != 15) > 0;
即簡單地過濾掉所有17和15,然后看是否還有其他東西。
聽起來這個問題可能與如何處理空集合有些混淆。 我發現將源划分為子集合可以使任何決策都更加清晰。
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.