簡體   English   中英

LINQ過濾器列表並排除MAX值

[英]LINQ filter list and exclude MAX value

LINQ的新增功能,試圖弄清楚如何從列表中排除項目。 我有一個名稱及其位置級別的列表。 看起來像

Name    ID    Level
aaa     123   0
bbb     122   1
ccc     222   2
ddd     223   3

我正在嘗試做的是找出一種排除最高級別記錄的方法。 我正在重構一些使用for循環進行檢查的代碼,而我很難確定如何進行鏡像。

您的類型的確切結構尚不清楚,但類似以下內容:

list.OrderBy(x=>x.Level).Take(list.Count-1) //其中x是列表中的項目(原始)

應該為你工作。

如果您可能有多個MAX值,請使用Distinct (請參閱文檔中的示例以了解如何使用它)

如果集合中可能有多個重復值(包括非MAX值),則可以這樣做

list.OrderByDescending(x => x.Level);
var max = list.First();
var result = list.SkipWhile(x=>x == max);

最簡單的方法是:

var max = list
    .Max(l => l.Level);

var listWithoutMax = list
    .Where(l => l.Level != max);

這個小的代碼片段應該可以正常工作:

Int32 max = list.Max(x => x.Level);
List<MyObject> newList = list.Where(x => x.Level != max).ToList();

並且,如果您的列表包含多個具有最高級別值的元素,則將確保從中刪除所有這些元素。

您可以使用RemoveAll()

var result = list.RemoveAll(x => x.Level == list.Max(s => s.Level));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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