我有以下代码:
from _categories in context.SCT_Categories
join _categoryOrders in context.SCT_CategoryOrders
on _categories.ID equals _categoryOrders.CategoryID into joinedData
from _categoryOrders in joinedData.DefaultIfEmpty()
orderby _categoryOrders.OrderIndex descending
select _categories
哪个左边连接类别和categoryOrders
每个catgoryOrder都有一个类别。
这很有效,除了当我想通过OrderIndex(可以为null到999)进行排序时,它会在查询的顶部放置所有空(即null返回的关系,其中类别没有categoryOrder)。
如何更改此值以将空值放在列表的末尾?在查询之后,优选地没有迭代将空值更改为999。
谢谢,
JD
答案 0 :(得分:5)
我没试过这个(IQueryProvider可能不喜欢它)
let orderIndex = _categoryOrders.OrderIndex ?? int.MaxValue
在您的orderby之前,而在orderIndex上订购。
答案 1 :(得分:1)
您可以先尝试对那些非空值进行排序,然后在最后添加空值:
var categories = from _categories in context.SCT_Categories
join _categoryOrders in context.SCT_CategoryOrders
on _categories.ID equals _categoryOrders.CategoryID into joinedData
from _categoryOrders in joinedData.DefaultIfEmpty()
select _categories;
var sortedCategories = categories.Where(c=>c.OrderIndex != null).OrderBy(c=>c.OrderIndex)
.union(categories.Where(c=>c.OrderIndex == null));