我需要根据2个参数(一个布尔值和一个DateTime
)为linq订购一个列表列表的顶部必须是真实的布尔值,然后按DateTime排序
在列表的底部,我们需要假的布尔值,也是DateTime命令
我怎样才能做到这一点?
答案 0 :(得分:1)
使用Enumerable.OrderBy
和Enumerable.ThenBy
作为第二个参数,对于按降序排序,请使用Enumerable.OrderByDescending
和Enumerable.ThenByDescending
。
对于您的特定情况,您需要首先显示true
,然后您想要按日期排序记录。如果您想先获得最新日期,那么您需要降序排列。在这种情况下,您的查询将是:
var query = list.OrderByDescending(r => r.BoolProperty)
.ThenByDescending(r => r.DateTimeProperty);
考虑到你有List<DummyClass>
喜欢:
List<DummyClass> list = new List<DummyClass>
{
new DummyClass() { BoolProperty = true, DateTimeProperty = DateTime.Now.AddDays(1)},
new DummyClass() { BoolProperty = true, DateTimeProperty = DateTime.Now.AddDays(2)},
new DummyClass() { BoolProperty = false, DateTimeProperty = DateTime.Now.AddDays(3)},
new DummyClass() { BoolProperty = false, DateTimeProperty = DateTime.Now.AddDays(-1)},
};
DummyClass
定义为:
public class DummyClass
{
public bool BoolProperty { get; set; }
public DateTime DateTimeProperty { get; set; }
}
对于输出,您可以使用:
foreach (var item in query)
{
Console.WriteLine("Bool {0}, DateTime {1}" , item.BoolProperty, item.DateTimeProperty);
}
输出将是:
Bool True, DateTime 09/05/2014 1:18:53 PM
Bool True, DateTime 08/05/2014 1:18:53 PM
Bool False, DateTime 10/05/2014 1:18:53 PM
Bool False, DateTime 06/05/2014 1:18:53 PM
答案 1 :(得分:1)
对于布尔值,您需要降序(false
比较它小于true
)。要添加其他订购参数,请使用ThenBy
(对于日期:最旧的)/ ThenByDescending
(对于日期:最新的)。我认为您正在寻找的方法是OrderByDescending
和ThenBy
。
myList.OrderByDescending(x => x.MyBool).ThenBy(x => x.MyDateTime)
答案 2 :(得分:1)
var result = yourList
.OrderBy(r=> r.BooleanField)
.ThenByDescending(r=> r.DateTimeField);
您必须先DateTime
降序才能获得最新的。
对于Boolean
,如果您希望先在true
上排序,那么也可以使用OrderByDescending
:
var result = yourList
.OrderByDescending(r=> r.BooleanField)
.ThenByDescending(r=> r.DateTimeField);