C# 如何使用LINQ设置整数有序列表中最后一个空值

C# 如何使用LINQ设置整数有序列表中最后一个空值,c#,linq,C#,Linq,我在控制器中有以下代码: var orders = db.Orders .OrderBy(o => o.Product.Category.Sequence) .ToList(); OrderBy子句按序列号(整数)订购产品。我的问题是,当一个类别没有序列号时,它是先排序的。我希望这是最后一次 当序列ID为空时,如何使其在列表中最后一个?您可以使用 var orders = db.Orders .OrderByDesc

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

var orders = db.Orders
            .OrderBy(o => o.Product.Category.Sequence)
            .ToList();
OrderBy
子句按序列号(整数)订购产品。我的问题是,当一个类别没有序列号时,它是先排序的。我希望这是最后一次

当序列ID为空时,如何使其在列表中最后一个?

您可以使用

var orders = db.Orders
            .OrderByDescending(o => o.Product.Category.Sequence)
            .ToList();
你可以做:

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

(以上代码将与内存中已有的
订单
列表一起使用)

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

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

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

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

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

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

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

因此,我认为您正在寻找以下内容:

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

如果类别没有序号,
Sequence
的值是多少?Sequence是
nullable int
right?
Sequence
是零。这解释了很多@user2609980,您的标题说您首先获得
null
排序值,您是获得
null
还是
0
,因为两者都不同,我现在已经使其可以为null,并使用了Habib的方法!根据OP的评论,我认为
Sequence
不是一个可为null的int。@Selman22,这个标题非常容易引起误解,那么“如何使用LINQ最后设置null值”我同意。如果值不为空,则
OrderByDescending
应该足够了。@Selman22,不,我认为这不够,我认为OP希望ID的自然顺序不是
0
,最后,希望ID设置为
0
的所有记录。如果ID为负,则为真:)