我在列表中有值:
List1
ID groupID testNo
1 123 0
2 653 1
3 776 6
4 653 0
我想写一个T-Sql或linq或lambda表达式,这样每当有重复时,它应该选择一个有值!= 0
我正在使用这个表达式,但它基本上没有给出我想要的结果。
var list2 = list1.GroupBy(x => x.testNo).Select(y => y.First());
如何获得结果,以便在testNo 1中使用其余记录选择groupID 653?
答案 0 :(得分:1)
您可以采取一些方法。我不知道他们中是否有任何证据。一种方法是在OrderBy
上执行testNo
,以便具有非零testNo
的项目在0之前出现。
var list2 = list1.Orderby(y => y.testNo).GroupBy(x => x.testNo).Select(z => z.FirstOrDefault());
如果你可以保证只有testNo = 0
才能使用dupes,那么最简单的方法就是使用where。
var list2 = list1.Where(x => x.testNo > 0).First();
答案 1 :(得分:0)
这应该会给你想要的结果:
var list2 = list1.GroupBy(x => x.groupID)
.Select(x => list1.Single(item => item.groupID == x.Key
&& item.testNo == x.Max(y => y.testNo)))
.ToList();
基本上,按groupID
分组,然后从原始list1
中选择与不同groupID
匹配的每个项目,并为testNo
设置groupID
的最大值}}
答案 2 :(得分:0)
var result = list.GroupBy(x => x.groupID).Select(g => g.Count() == 1 ? g.First() : g.First(x => x.testNo != 0));