2014-07-16 129 views
4

当两列同时选择时,如何将其转换为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 

回答

5

如果您在返回意图荷兰国际集团“行”,而不是两个值,可以组中的所有行作为一起在第一个LINQ表达式做:

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

注意,我想这是对LINQ到SQL。对于普通的旧对象,这很可能会导致集合中的三次迭代。一个做分组,一个用于Min(),另一个用于Max()。对于大型系列,您可以更好地循环一次,并在集合上使用单一的foreach

+0

感谢您的快速响应。在你的代码中,我看到了这一行tbl.GroupBy(t => 1),这是什么目的?这是我看到它实际上迭代3次的一种方式吗?我只想知道你用来检查的方法,以便下次我编码时我知道如何排除故障。 – tsohtan

+0

它实际上与你的'group a'相同,只有0而不是0(真的没有理由)。 –

+0

好吧,我也遵循示例代码,并不确定那是什么。对于你上面提到的迭代,我不明白为什么迭代,你能告诉我你是如何发现的? – tsohtan

相关问题