如何使用表达式>在 Linq to EF where 条件下?

发布于 2024-12-10 15:20:37 字数 755 浏览 1 评论 0 原文

关于此主题已经存在一些问题(例如实体框架中的Expression.Invoke?),但是,我找不到适合我的具体情况的答案。 我想定义一个这样的方法:

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”类型。 我做错了什么?

There have already been some questions about this topic (for instance Expression.Invoke in Entity Framework?), however, I could not find an answer for my specific situation.
I would like to define a method like this:

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

The AsExpandable method is from LinqKit (as it was adviced in the thread mentioned before).
However, when I try to call my method like his:

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

It throws an InvalidCastException:

Unable to cast object of type 'System.Linq.Expressions.InstanceMethodCallExpressionN' to type 'System.Linq.Expressions.LambdaExpression'.
What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笑百媚生 2024-12-17 15:20:37

如果要使用表达式树,则需要将表达式树本身传递给 LINQ 方法:

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

If you want to use an expression tree, you need to pass the expression tree itself to the LINQ method:

return ctx.Customers.AsExpandable().Where(condition)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文