按对象的object.property lambda在List中排序项目

时间:2016-01-22 19:45:03

标签: c# lambda

public class Object1
{
    public List<Object2> Logs { get; set; }
}

public class Object2
{
    DateTime aDate { get; set; }
}

现在我要做的是设置

的顺序
List<Object1>

根据Object1.Logs中最新的Object2项。 我怎样才能以lambda的简写方式正确地做到这一点?

2 个答案:

答案 0 :(得分:6)

如果您想按升序排序列表,则可以从内部列表中选择最小日期,然后在OrderBy中使用该日期,如:

var orderedQuery = list.OrderBy(r => r.Logs
                                    .Min(t => t.aDate));

只需确保将您的媒体设为aDate public,否则在课堂外不会显示。

如果您希望首先获取最新值,则需要Max而不是Min从内部列表中选择最新日期,如果您需要,请使用OrderByDescending特别的顺序。

您还可以添加检查以查看Emptynull以下内容:

var orderedQuery = list.OrderBy(r => (r.Logs != null && r.Logs.Any()) ? 
                                        r.Logs.Max(t => t.aDate) 
                                        : DateTime.MinValue);

答案 1 :(得分:0)

var list = new List<Object1>();

/* add your Object1 objects here */

list = list.OrderByDescending(c => c.Logs.Max(d => d.aDate)).ToList();