Я использую EF 4.2, но я ожидаю, что это применимо к EF 4 и 4.1 также.
Я хочу передать IQueryable
и несколько Expression
в метод и применить метод OrderBy
и ThenBy
в IQueryable
в зависимости от ситуации.
Я нашел этот ответ и написал метод, основанный на этом:
public IQueryable ApplyOrderBy(IQueryable query, IEnumerable>> orderBy)
{
if (orderBy == null)
{
return query;
}
IOrderedQueryable output = null;
foreach(var expression in orderBy)
{
if (output == null)
{
output = query.OrderBy(expression);
}
else
{
output = output.ThenBy(expression);
}
}
return output ?? query;
}
Это отлично работает, пока свойства, по которым я упорядочиваю, являются строкой
, но когда я попытаться упорядочить по свойству int
, я получаю исключение:
Невозможно привести тип System.Int32 к типу System.IComparable. LINQ to Entities поддерживает только приведение примитивных типов модели данных сущности.
Есть предложения, как обойти это или вообще использовать другой подход? Я подумал о передаче IEnumerable
, но тогда мне нужно было бы выяснить, как выполнить приведение к определенному типу (например, Expression
) для вызова OrderBy
.