c# - 创建调用表达式树的表达式树

标签 c# entity-framework

我在一个类上有一个属性

Expression<Func<Product, int>> predicate;

将在整个应用程序中分配给不同的表达式。

在名为 GetProducts 的方法中,我想使用 Entity Framework 使用此谓词从数据库中检索产品。然后,我将有一个名为 myInt 的变量,我想将其用作 int 参数,然后将为其分配一个值。

所以我尝试了

dbContext.Products.Where(p => predicate(p, myInt))

但是我得到了不可调用的成员“谓词”不能像方法一样使用。错误。

看起来我需要进行一些表达式树操作,以创建一个新的表达式树,其中包含 myInt 。我怎样才能做到这一点?

感谢您的帮助。

最佳答案

您将 predicate 定义为 Type,但您将其用作方法。

您可以通过以下方式定义谓词:

private bool predicate(Product product, int myInt)
{
    //put your logic here
    return true;
}

您还可以使用 lambda 表达式:

product => product.SomeValue > 5

编辑:

Expression<Func<Product, int>> predicate = (product,val) => product.SomeValue > val;
var filtered = dbContext.Products.Where(predicate);
  • 命名参数时避免使用类型(即不要命名整数 MyInt)

关于c# - 创建调用表达式树的表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346936/

相关文章:

c# - 使用 TypeWriter 有条件地发出方法

c# - 访问 Google 翻译服务 (C# WinForms)

c# - 在本地使用 SQL Server CE 并首先在生产 Entity Framework 代码上使用 SQL Server 2008?

entity-framework - 使用Moq和Autofac在单元测试中 Entity Framework 的扩展方法

c# - 使用C#解析CSV文件,忽略千位分隔符

c# - 使用 C# 在 Excel 中使用预期的签名者、电子邮件等制作签名行

c# - 达到上传文件的最大长度

c# - 获取或附加实体

entity-framework - EF 中多对多表的命名约定是什么

c# - 使用Linq判断记录是否存在于列表中但存在于表中