У меня есть следующий код:Как изменить порядок сортировки в Linq-to-Sql?
IQueryable<Guid> GetOrdered(IQueryable<Guid> ids)
{
return from id in ids join storedId in storedIds on id equals storedId.Id
orderby storedId.Something select id;
}
Теперь я хочу, чтобы ввести параметр в GetOrdered()
и, возможно, изменить orderby
с orderby descending
. Что-то вроде этого:
IQueryable<Guid> GetOrdered(IQueryable<Guid> ids, bool descending)
{
// how do I insert descending into the query below?
return from id in ids join storedId in storedIds on id equals storedId.Id
orderby storedId.Something select id;
}
Конечно, я мог бы написать два одинаковых запросов - один с orderby
, а другой с orderby descending
, но это означает, что дублирование кода.
В качестве альтернативы я мог бы использовать суб-заявление для неупорядоченного набора, а затем условно заказать его like in this answer но проблема мне тогда нужно Select()
конкретный столбец и что последний Select()
будет оказывать неупорядоченный результат.
Так что я мог бы попытаться выработать «умное» состояние заказа в in this answer:
var result = from w in widgets where w.Name.Contains("xyz")
orderby
flag ? w.Id : 0,
flag ? 0 : w.Id descending
select w;
, но проблема, я часто буду иметь нечисловой столбец как один, с помощью которого мне нужно мой набор заказал.
Как я могу условно отменить порядок сортировки в этих условиях?
Я не понимаю, почему вы не можете использовать решение «подзаголовок с условным порядком»? – Magnus
@Magnus: Это потому, что он будет сначала «упорядочен», затем «отфильтрован» без какого-либо определенного порядка. – sharptooth
@sharptooth Если вы выполняете 'select' после' orderby', 'select' не изменяет порядок результатов. (Хотя я мог ошибаться, возможно, LINQ-to-objects предоставляет больше гарантии здесь, чем делает LINQ-to-SQL.) – Rawling