C# 用于从列表检索数据的LINQ查询
我有消息对象的列表集合C# 用于从列表检索数据的LINQ查询,c#,linq,C#,Linq,我有消息对象的列表集合 public class Message { public int Id { get; set; } public string Body { get; set; } public string Sender { get; set; } public DateTime Timestamp { get; set; } } 我只想为每个发件人获取一封带有最新时间戳的邮件。如何使用LINQ进行分组?您需要按发送方进行分组,然后从每个组中获取最大
public class Message
{
public int Id { get; set; }
public string Body { get; set; }
public string Sender { get; set; }
public DateTime Timestamp { get; set; }
}
我只想为每个发件人获取一封带有最新时间戳的邮件。如何使用LINQ进行分组?您需要按
发送方进行分组,然后从每个组中获取最大时间戳,如:
var query = list.GroupBy(r => r.Sender)
.Select(grp => new
{
Sender = grp.Key,
RecentTimeStamp = grp.Max(r => r.Timestamp)
});
或者,您可以按降序对组中的时间戳进行排序,并获得第一个元素,如:
var query = list.GroupBy(r => r.Sender)
.Select(grp => new
{
Sender = grp.Key,
RecentTimeStamp = grp.OrderByDescending(r => r.Timestamp).FirstOrDefault()
});
为什么OrderBy而不是Max(IEnumerable,Func)你试过了吗?此外,这些消息是如何包含的?
var q = from n in table
group n by n.Senderinto g
select g.OrderByDescending(t=>t.Timestamp).FirstOrDefault();