使用LINQ查找MAX/MIN列表项

本文关键字:MIN 列表 MAX LINQ 查找 使用 | 更新日期: 2023-09-27 18:28:30

我有一个列表,其中包含多个项目和3个道具ID、DATE、COMMENT.ID字段在DATABASE中自动递增。

假设列表包含

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

我想得到一个单一的项目。项目有最短的日期和最新的意见。在这种情况下,

1,15AUG,CommentLASTModified

任何使用LINQ的简单方法。

使用LINQ查找MAX/MIN列表项

orderedItems = items.OrderBy(x => x.Date);
var result = items.First();
result.Comment = items.Last().Comment;

要从列表中取出一个项目,您可以订购这些项目,然后取第一个,如下所示:

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

但是,如果items集合为空,则First将引发异常。这比较安全:

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();