c#根据对象的属性对对象列表进行排序

c#根据对象的属性对对象列表进行排序,c#,linq,C#,Linq,我有一个匹配对象列表: IEnumerable<Match> matches 我的MatchMessage类如下所示: public class MatchMessage { [JsonProperty("_id")] public string Id { get; set; } [JsonProperty("message")] public string Message { get; set; } [JsonProperty(

我有一个匹配对象列表:

IEnumerable<Match> matches
我的MatchMessage类如下所示:

    public class MatchMessage
{
    [JsonProperty("_id")]
    public string Id { get; set; }

    [JsonProperty("message")]
    public string Message { get; set; }

    [JsonProperty("sent_date")]
    public string SentDate { get; set; }
}
现在,我想按照MatchMessage中的SentDate属性对匹配列表进行排序,我很难弄清楚这一点

我试过:

var newList = matchList.OrderBy(match => match.Messages.OrderBy(x => x.SentDate));

但是当我这样做的时候,我会出错。我在谷歌上搜索了一段时间,找不到解决办法。如何执行此操作?

您的单个
匹配项可能包含多条消息,因此对于一个
匹配项
,可能会有多条
发送日期

要使用匹配中第一条消息的SendDate,请执行以下操作:

var newList = matchList.OrderBy(match => match.Messages.FirstOrDefault()?.SendDate);
要在邮件中使用最新的发送日期,请执行以下操作:

var newList = matchList.OrderBy(match => match.Messages.OrderBy(m => m.SendDate).FirstOrDefault()?.SendDate);

警告:使用C#6.0的空传播(仅在VS 2015中)

这将按每个匹配的最新消息升序排列
匹配列表

var newList = matchList.OrderBy(
        match =>
            match.Messages.Any()
            ? match.Messages.Max(x => DateTime.Parse(x.SentDate))
            : DateTime.MaxValue);

注意:给定的SentDate是正确的日期时间格式。

当我运行此命令时,我得到一个错误:序列不包含elements@ygetarts,这是因为matchList中的一个项不包含任何消息,我已编辑代码以支持它。我使用VS2013,因此将其修改为var newList=matchList.OrderBy(match=>match.Messages.OrderBy(m=>m.SentDate).FirstOrDefault());但是,这会返回与在OP中运行查询时相同的错误:至少一个对象必须实现IComparable。
var newList = matchList.OrderBy(
        match =>
            match.Messages.Any()
            ? match.Messages.Max(x => DateTime.Parse(x.SentDate))
            : DateTime.MaxValue);