Как сделать «если» в Linq orderby? - PullRequest
2 голосов
/ 13 января 2012

У меня есть 2 поля для сортировки: Название продукта и Цена плюс 2 варианта: по возрастанию или по убыванию.

Пользователь может указать порядок сортировки, установив 2 флажка: включить или выключить флажок Цена и включить или выключить флажок по возрастанию.

Как мне кодировать предложение orderby, если порядок сортировки устанавливается динамически на основе настроек двух вышеупомянутых флажков?Спасибо.

Ответы [ 2 ]

6 голосов
/ 13 января 2012

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

var query = from product in db.Products select product;

if(price.Checked && ascending.Checked)
{
    query = query.OrderBy(product => product.Price);
}
else if(price.Checked && !ascending.Checked)
{
    query = query.OrderByDescending(product => product.Price);
}
else if(!price.Checked && ascending.Checked)
{
    query = query.OrderBy(product => product.Name);
}
else
{
    query = query.OrderByDescending(product => product.Name);
}
2 голосов
/ 13 января 2012

Обратите внимание, что приведенное ниже условие возрастания основано на вашем коде

if(ascendingCondition)
{
   ProductCollection.OrderBy(p => p.Name).ThenBy(p => p.Price)
}
else
{
   ProductCollection.OrderByDescending(p => p.Name).ThenByDescending(p => p.Price)
}
...