LINQ的新手,并尝试弄清楚如何从列表中排除项目。我有一个名单和他们的职位级别列表。看起来像
Name ID Level
aaa 123 0
bbb 122 1
ccc 222 2
ddd 223 3
我想要做的是找出一种排除最高级别记录的方法。我正在重构一些使用for循环来检查这个问题的代码,并且我很难弄清楚如何镜像它。
答案 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));