在LINQ获取最短日期行?

KJ3*_*KJ3 2 c# linq

我有一张桌子上有日期/时间,我想找到最小日期的整行.看这个例子:

ID     First     Last     ADateTime             Processed
1      Joe       Smith    09/06/2013 04:00 AM   True
1      Joe       Smith    09/06/2013 02:00 AM   False
2      Jack      Jones            
3      John      Jack     09/05/2013 06:00 AM   True
3      John      Jack     09/26/2013 02:00 AM   False
Run Code Online (Sandbox Code Playgroud)

我想从查询中得到的是获得以下内容:

ID     First     Last     ADateTime             Processed
1      Joe       Smith    09/06/2013 02:00 AM   False
2      Jack      Jones            
3      John      Jack     09/05/2013 06:00 AM   True
Run Code Online (Sandbox Code Playgroud)

我有一个接近的LINQ语句:

        var uniqueGuys = from d in tests.AsEnumerable()
                         group d by d.ID into g
                         let f = g.FirstOrDefault()
                         where f != null
                         select new
                         {
                             f.ID,
                             f.First,
                             f.Last,
                             ADateTime = g.Min(c => c.DateTime),
                             f.Processed
                         };
Run Code Online (Sandbox Code Playgroud)

这为3个ID中的每个ID提供了正确的最小日期,但其余信息不正确.例如,对于ID 1,我得到Joe Smith的日期为09/06/201 2:00 AM,这是正确的,但它显示处理为True而不是附加到该行的false.看起来它只是抓住最小的日期/时间,然后它可以找到其他东西的第一条记录.有没有办法获得最小ADateTime的完整行?

Ale*_*lex 6

您可以执行orderby,然后选择第一个.

如:

var uniqueGuys = from d in from d in tests.AsEnumerable()
                 group d by d.ID into g
                 select g.OrderBy(p => p.DateTime).First(); 
Run Code Online (Sandbox Code Playgroud)

  • 除非你能保证表中至少有一个条目,否则我会使用`FirstOrDefault()`. (3认同)