如何使用LINQ在有序的整数列表中最后设置空值

时间:2014-02-28 14:18:18

标签: c# linq

我在控制器中有以下代码:

var orders = db.Orders
            .OrderBy(o => o.Product.Category.Sequence)
            .ToList();

OrderBy子句按顺序号(整数)对产品进行排序。我遇到的问题是,当一个类别没有序列号时,它首先被排序。我希望它是最后一次。

如果序列ID为空,我怎样才能使序列ID在列表中最后?

6 个答案:

答案 0 :(得分:6)

你可以这样做:

var oders = db.Orders
              .OrderBy(r=> r.Product.Category.Sequence == null)
              .ThenBy(r=> r.Product.Category.Sequence)
              .ToList();

如果你有能力在内存中订购记录(从数据库中获取后),那么你可以这样做:

var newList = orders
                .OrderBy(r=> r.Prdocut.Category.Sequence ?? int.MaxValue)
                .ToList();

(上述代码适用于内存中现有的orders列表

答案 1 :(得分:2)

如果Sequence值为0而不是null,请尝试以下操作:

var orders = db.Orders
            .OrderBy(o => o.Product.Category.Sequence == 0 ? int.MaxValue : o.Product.Category.Sequence)
            .ToList();

答案 2 :(得分:1)

您可以使用

var orders = db.Orders
            .OrderByDescending(o => o.Product.Category.Sequence)
            .ToList();

答案 3 :(得分:1)

不确定这是否有效,但您也可以尝试:

var orders = db.Orders
            .OrderBy(o => o.Product.Category.Sequence ?? int.MaxValue)
            .ToList();

这假设您没有任何int.MaxValue序列。

答案 4 :(得分:1)

试试这个:

var orders = (from o in db.Orders
                 orderby by o.Product.Category.Sequence.HasValue descending, 
                            o.Product.Category.Sequence
                     select o).ToList();

答案 5 :(得分:0)

正如您所提到的,序列号是一个整数,所以我理解您“当一个类别 没有序列号“表示当序列处于默认值0时。

所以我认为您正在寻找以下内容:

var orders = db.Orders
        .OrderBy(o => o.Product.Category.Sequence == default(int))
        .ThenBy(o => o.Product.Category.Sequence)
        .ToList();