使用LINQ查找MAX / MIN列表项?

时间:2013-08-22 06:13:54

标签: c# asp.net .net linq list

我有一个列表有多个Items和3个道具ID,DATE,COMMENT.ID字段在DATABASE中自动递增。

让我们说清单包含

2,16AUG,CommentMODIFIED
1,15AUG,CommentFIRST
3,18AUG,CommentLASTModified

我想获得一个ITEM.Item有最小DATE并有最新评论。在这种情况下

1,15AUG,CommentLASTModified

使用LINQ做任何简单的方法。

2 个答案:

答案 0 :(得分:4)

orderedItems = items.OrderBy(x => x.Date);

var result = items.First();
result.Comment = items.Last().Comment;

答案 1 :(得分:1)

要从列表中获取单个项目,您可以订购商品,然后选择第一个商品,如下所示:

var result = items
    .OrderByDescending(x => x.Date)
    .First();

但如果First集合为空,items将抛出异常。这有点安全:

var result = items
    .OrderByDescending(x => x.Date)
    .FirstOrDefault();

要获取不同列的最小值/最大值,您可以执行以下操作:

var result = 
    new Item {
         Id = 1,
         Date = items.Min(x => x.Date),
         Comment = items.Max(x => x.Comment)
    };

但这需要两次前往数据库。这可能会更有效:

var result = 
    (from x in items
     group x by 1 into g
     select new Item {
         Id = 1,
         Date = g.Min(g => g.Date),
         Comment = g.Max(g => g.Comment)
     })
    .First();

或者用流利的语法:

var result = items
    .GroupBy(x => 1)
    .Select(g => new Item {
         Id = 1,
         Date = g.Min(g => g.Date),
         Comment = g.Max(g => g.Comment)
     })
    .First();