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

标签 c# linq

我有一个匹配对象列表:

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 格式。

关于c# 根据对象的属性对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108004/

相关文章:

c# - 攻击/跟随我的玩家

c# - 在 ASP.NET CORE 中的 Startup.cs 中设置动态变量

C# - 从 DirectoryInfo 中删除某些文件

c# - 在 C# 中禁用 CLS 合规性检查

c# - 实现您自己的 LINQ 和 IEnumerable<T>

javascript - Linq.js Enumerable.from()

c# - 如何在.net core 3.1中使用System.Text.Json获取对象内部对象的值

c# - LINQ 加入两个数据表

c# - 如何在不编译的情况下从现有的 LambdaExpression 构建 LambdaExpression

c# - Group By 使用超过两列的 Lambda 表达式