linq命令由2个参数组成

时间:2014-05-07 17:06:52

标签: .net linq

我需要根据2个参数(一个布尔值和一个DateTime

)为linq订购一个列表

列表的顶部必须是真实的布尔值,然后按DateTime排序

在列表的底部,我们需要假的布尔值,也是DateTime命令

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

使用Enumerable.OrderByEnumerable.ThenBy作为第二个参数,对于按降序排序,请使用Enumerable.OrderByDescendingEnumerable.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(对于日期:最新的)。我认为您正在寻找的方法是OrderByDescendingThenBy

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);