2011-01-11 30 views
11

我希望得到一个列表的顺序由三个属性,按优先级是如何管理多个OrderByDescending标准?

  1. TODATE
  2. RunDate

我的代码是在这里

MyList 
    .OrderByDescending(p => p.ToDate) 
    .OrderByDescending(p => p.Number) 
    .OrderByDescending(p => p.RunDate) 
    .FirstOrDefault(); 

但结果不正确。

例如,当MyList包含两个元素:e1,e2和e1.ToDate> e2.ToDate时,结果为e2。

哪个属性应该优先?具有最高优先级(ToDate)或最低优先级(RunDate)的属性?

+0

这与Fluent Nhibernate无关 - 它纯粹是LINQ。我编辑了标签 - 建议你(或者有足够代表的其他人)编辑标题。 – 2011-01-11 15:00:49

回答

21

我怀疑你真的想:

MyList 
.OrderByDescending(p => p.ToDate) 
.ThenByDescending(p => p.Number) 
.ThenByDescending(p => p.RunDate) 
.FirstOrDefault(); 

ThenByThenByDescending用于指定二次排序您提供使用OrderByOrderByDescending小学一后。