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

时间:2016-01-30 22:31:18

标签: c# linq

我有一个Match对象列表:

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

    [JsonProperty("last_activity_date")]
    public string LastActivityDate { get; set; }

    [JsonProperty("messages")]
    public MatchMessage[] Messages { get; set; }

}

匹配看起来像这样

    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类如下所示:

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

现在,我想通过MatchMessage中的SentDate属性对匹配列表进行排序,我很难搞清楚这一点。

我试过了:

position_num=which(df$word=="ABC")

但是当我这样做时我收到了错误。我已经谷歌搜索了一段时间,无法找到解决方案。我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

这将按每场比赛的最新消息按升序排序matchList

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

注意:鉴于SentDate已正确格式化DateTime。

答案 1 :(得分:0)

您的单个​​Match可能包含多条消息,因此一个SendDate可能有多个Match

要在匹配内的第一条消息中使用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)