Я создаю Spec Evaluator, который должен учитывать несколько возможных OrderBy, как в следующем примере:
if (spec.Order != null)
{
var count = spec.Order.Count;
if (count == 1)
{
query = query.OrderBy(spec.Order[0]);
}
else if (count == 2)
{
query = query.OrderBy(spec.Order[0])
.ThenBy(spec.Order[1]);
}
else if (count == 3)
{
query = query.OrderBy(spec.Order[0])
.ThenBy(spec.Order[1])
.ThenBy(spec.Order[2]);
}
// And so on...
}
Query
- это IQueryable
, spec.Order
- это список предложений: List<Expression<Func<T, object>>>
.
Я знаю, что могу использовать OrderBy со всеми предложениями, передаваемыми в виде строки. И я думаю, я могу просто спроецировать все предложения Order
на новую строку через запятую. Но это решение не кажется чистым.
Есть ли другой способ динамически генерировать один новый ThenBy
для каждого элемента списка Order
, выше 1?