LINQ过滤列表并排除MAX值

时间:2018-03-27 15:17:51

标签: c# linq

LINQ的新手,并尝试弄清楚如何从列表中排除项目。我有一个名单和他们的职位级别列表。看起来像

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

我想要做的是找出一种排除最高级别记录的方法。我正在重构一些使用for循环来检查这个问题的代码,并且我很难弄清楚如何镜像它。

4 个答案:

答案 0 :(得分:1)

您的类型的确切结构尚不清楚,但类似这样:

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);

答案 1 :(得分:1)

最简单的方法是:

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

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

答案 2 :(得分:1)

这个小代码片段应该可以正常工作:

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

并且,如果您的列表包含多个具有最大级别值的元素,则将确保将从中删除所有这些元素。

答案 3 :(得分:0)

您可以使用RemoveAll()

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