LINQ使用左连接通过FK命令

时间:2010-10-11 02:20:48

标签: c# .net linq-to-sql

我有以下代码:

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

2 个答案:

答案 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));