我正在继续LINQ: Groupby and Last。
基本上我有下表:
ID Field1 Field2 Field3
1 aaaa 20/01/2014 10
2 aaaa 21/01/2014 3
3 aaaa 25/01/2014 10
4 bbbb 01/01/2014 90
5 bbbb 03/01/2014 10
6 bbbb 31/01/2014 5
我想按Field1进行分组,并根据Field2获取每组最旧的一行。
我还需要根据field3构建一些复杂的计算(我为此使用“let”)。 现在我在Where子句中使用“let”。这一切都很好。
我有:
var result = from p in Table1
let MyLet = p.Field3 - 1 //This is actually very complex in the real scenario.
Where MyLet > 5
group p by p.Field1 into grp
select grp.OrderByDescending(g=>g.Field2).First();
现在......如何将MyLet包含在最终结果中,所以看起来像这样
ID Field1 Field2 Field3 MyLet
3 aaaa 25/01/2014 10 9
5 bbbb 03/01/2014 10 9
答案 0 :(得分:2)
试试这个: -
var result = from p in fields
let MyLet = p.Field3 - 1
where MyLet > 5
group new { p, MyLet } by p.Field1 into grp
let firstField = grp.OrderByDescending(x => x.p.Field2).First()
select new
{
ID = firstField.p.ID,
Field1 = firstField.p.Field1,
Field2 = firstField.p.Field2,
Field3 = firstField.p.Field3,
MyLet = firstField.MyLet
};
请在访问字段前考虑检查Null。