Lambda表达式同时选择Min和Max

时间:2014-07-16 09:10:30

标签: c# sql linq lambda

当有两列同时选择时,如何将其转换为Lambda表达式?

LINQ

var lq=(from a in tbl
          group a by 0 into b
          select new { intYear = b.Min(p => p.intYear), tintMonth = b.Max(p => p.tintMonth) }
    ).SingleOrDefault();

T-SQL

SELECT MIN(intYear), MAX(tintMonth)
FROM tbl

Lamdba表达

tbl.Select(x => x.intYear).Min();  //Can't figure how to select if 2 columns

1 个答案:

答案 0 :(得分:5)

如果您打算返回"行"您可以像在第一个LINQ表达式中一样将所有行组合在一起而不是两个值:

tbl.GroupBy(t => 1)
   .Select(g => new { intYear = g.Min(p => p.intYear), tintMonth = g.Max(p => p.tintMonth) })

注意,我假设这是针对LINQ-to-SQL的。对于普通旧对象,这很可能导致整个集合中的三次迭代。一个用于分组,一个用于Min(),另一个用于Max()。对于大型集合,你可以更好地循环一次,并且在集合上使用单个foreach进行良好的方式。