LINQ OrderBy из Entity Framework сначала только положительные значения - PullRequest
0 голосов
/ 22 апреля 2020

Есть ли способ получить товары из базы данных, используя Entity Framework, упорядоченный по цене, но если есть товары, цена которых равна 0, они должны быть в конце, а не в начале

Вот мой запрос:

 result = await _products.OrderBy(p => p.Price)
                .Skip((parameters.PageNumber - 1) * parameters.PageSize) //simple pagination here
                .Take(parameters.PageSize)
                .ToListAsync();

Можно ли изменить его для достижения моей цели?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Заказ сначала <= 0. False стоит первым в логических значениях.

_products.OrderBy(p => p.Price <= 0).ThenBy(p => p.Price)
0 голосов
/ 22 апреля 2020
var a = new[] { 0, 1, 2, 3, 4 };
a.OrderBy(x => x > 0 ? x : int.MaxValue)

Должен быть переведен в том же порядке с помощью операторов case в SQL. Не уверен насчет int.MaxValue, может быть, вам сначала нужно будет присвоить его какой-либо переменной.

Тогда может также работать, но я не уверен, что ваша база данных может правильно оптимизировать несколько «упорядочить по». Большая часть RDMS сделает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...