LINQ:将LET分组并包含在最终结果中

时间:2014-12-27 15:12:29

标签: c# linq group-by

我正在继续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

1 个答案:

答案 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。