簡體   English   中英

c#按對象的屬性對對象列表進行排序

[英]c# Sort a list of objects by a property of an object

我有一個Match對象列表:

IEnumerable<Match> matches

匹配看起來像這樣

    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; }

}

我的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));

但是當我這樣做時,我收到了一個錯誤。 我已經谷歌搜索了一段時間,無法找到解決方案。 我該怎么做呢?

這將按每個匹配的最新消息按升序排序matchList

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

注意:給定SentDate是正確的DateTime格式。

您的單個Match可能包含多個消息,因此一個Match可能有多個SendDate

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM