Как использовать выражение> в линке к EF где состояние? - PullRequest
3 голосов
/ 17 октября 2011

По этой теме уже было несколько вопросов (например, Expression.Invoke в Entity Framework? ), однако я не смог найти ответ для своей конкретной ситуации.Я хотел бы определить метод следующим образом:

public IQueryable<Customer> GetCustomers(Expression<Func<Customer, bool>> condition)
{
    return from p in ctx.Customers.AsExpandable()
        where condition.Compile()(p)
        select p;
}

Метод AsExpandable от LinqKit (как это было рекомендовано в упомянутом ранее потоке).Тем не менее, когда я пытаюсь вызвать мой метод, как его:

var customers = GetCustomers(c => c.ID == 1);

Выдает InvalidCastException:

Невозможно привести объект типа 'System.Linq.Expressions.InstanceMethodCallExpressionN'набрать 'System.Linq.Expressions.LambdaExpression'.Что я делаю не так?

1 Ответ

5 голосов
/ 17 октября 2011

Если вы хотите использовать дерево выражений, вам нужно передать само дерево выражений методу LINQ:

return ctx.Customers.AsExpandable().Where(condition)
...