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

Mar*_*rdt 0 c# lambda

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

public class Object2
{
    DateTime aDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我要做的是设置a的顺序

List<Object1>
Run Code Online (Sandbox Code Playgroud)

根据Object1.Logs中最新的Object2项.我怎样才能用lambda的速记来做到这一点?

Hab*_*bib 6

如果您想按升序排序列表,那么您可以从内部列表中选择最小日期,然后将其用于OrderBy:

var orderedQuery = list.OrderBy(r => r.Logs
                                    .Min(t => t.aDate));
Run Code Online (Sandbox Code Playgroud)

只要确保你的财产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);
Run Code Online (Sandbox Code Playgroud)

  • 我认为最新意味着最新值,因此你应该使用`Max`. (2认同)