簡體   English   中英

使用linq檢查DTO列表,以查看所有排除特定值的值是否都相同

[英]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。去做?

我相信您的要求是:

  1. 忽略狀態= 17的任何內容
  2. 在其余記錄中,確保它們的狀態均為15
  3. 確保至少有一條記錄

我相信可以做到

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM