按对象的 object.property lambda 对列表中的项目进行排序

本文关键字:项目 排序 列表 对象 object property lambda | 更新日期: 2023-09-27 18:31:39

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

现在我正在尝试做的是设置一个

List<Object1>

根据 Object1.Logs 中最新的 Object2 项。如何使用 lambda 速记正确地做到这一点?

按对象的 object.property lambda 对列表中的项目进行排序

如果要按升序对列表进行排序,则可以从内部列表中选择最小日期,然后在OrderBy中使用它,例如:

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

只要确保使你的属性aDate public,否则它将在类外不可见。

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

您还可以添加检查以检查Empty并在以下行null某些内容:

var orderedQuery = list.OrderBy(r => (r.Logs != null && r.Logs.Any()) ? 
                                        r.Logs.Max(t => t.aDate) 
                                        : DateTime.MinValue);
var list = new List<Object1>();
/* add your Object1 objects here */
list = list.OrderByDescending(c => c.Logs.Max(d => d.aDate)).ToList();