我在控制器中有以下代码:
var orders = db.Orders
.OrderBy(o => o.Product.Category.Sequence)
.ToList();
OrderBy
子句按顺序号(整数)对产品进行排序。我遇到的问题是,当一个类别没有序列号时,它首先被排序。我希望它是最后一次。
如果序列ID为空,我怎样才能使序列ID在列表中最后?
答案 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();