LINQ orderby FK используя левое соединение - PullRequest
2 голосов
/ 11 октября 2010

У меня есть следующий код:

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

Что делает левое соединение по категориям и заказам категорий

Для каждого заказа категории есть категория.

Это работает хорошо, за исключением того, что когда я хочу упорядочить по OrderIndex (может быть нулевым до 999), он помещает все пустые (то есть возвращаемые нулевые отношения, где категория не имеет categoryOrder) вверху запроса.

Как мне изменить это, чтобы пустые значения были в конце списка? Желательно без итерации после запроса изменить пустые значения на 999.

Спасибо

JD

Ответы [ 2 ]

5 голосов
/ 11 октября 2010

Я не пробовал это (IQueryProvider может не понравиться)

let orderIndex = _categoryOrders.OrderIndex ?? int.MaxValue

Прямо перед вашим заказом, и вместо этого заказывайте по OrderIndex.

1 голос
/ 11 октября 2010

Вы можете сначала попытаться отсортировать их с ненулевыми значениями, а в конце добавить нулевые значения:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...