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为负,则为真:)