我有一个列表,其中包含多个项目和 3 个道具 ID、日期、COMMENT.ID 字段在数据库中自动递增。
假设列表包含
2,16AUG,CommentMODIFIED
1,15AUG,CommentFIRST
3,18AUG,CommentLASTModified
我想获得一个 ITEM.Item 具有最小 DATE 并具有最新评论。在这种情况下
1,15AUG,CommentLASTModified
使用 LINQ 的任何简单方法。
orderedItems = items.OrderBy(x => x.Date);
var result = items.First();
result.Comment = items.Last().Comment;
要从列表中取出单个项目,您可以订购这些项目,然后取出第一个项目,如下所示:
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();