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