Как передать несколько выражений в OrderBy для EF?

Я использую 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 .

13
задан Community 23 May 2017 в 12:00
поделиться