选择与特定条件不同的

时间:2013-06-17 23:48:28

标签: c# sql-server linq tsql lambda

我在列表中有值:

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?

3 个答案:

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