Я пытаюсь построить метод расширения для IQueryable, который принимает направление сортировки в качестве аргумента. Я хочу иметь возможность применить этот метод к запросам SQL-сервера с помощью EF. Вот то, что я до сих пор:Поиск соответствующего типа возвращаемого значения для общих функций linq to SQL
public static class QueryableExtensions
{
public static IOrderedQueryable<T> ApplyOrdering<T>(this IQueryable<T> source, Expression<Func<T, Object>> lambda, bool ascending)
{
return ascending ? source.OrderBy(lambda) : source.OrderByDescending(lambda);
}
}
Я следующий код драйвера:
[Table("TestTable")]
public partial class TestTable
{
[Key]
public int IntVal { get; set; }
}
public partial class Model1 : DbContext
{
public Model1()
: base("name=Model1")
{
}
public virtual DbSet<TestTable> TestTables { get; set; }
}
class Program
{
private static void Main(string[] args)
{
var context = new Model1();
var baseQuery = from entity in context.TestTables
select entity;
var sortedByInt = baseQuery.ApplyOrdering(x => x.IntVal, true).ToList();
}
}
Однако выполнение этого кода приводит к следующей ошибке:
Unable to cast the type 'System.Int32' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
Есть работать вокруг? Я подозреваю, что мне нужен альтернативный тип возврата для выражения.