Entity framework 实体框架Where子句中导入的函数?

Entity framework 实体框架Where子句中导入的函数?,entity-framework,Entity Framework,是否可以在实体框架中的where子句中使用函数导入?我尝试了以下方法,但我得到了一个相当神秘的异常,我找不到任何有关该异常的信息: var q = MyContext.MyEntities.Where("MyContext.MyFunction(it.ID)") (该函数设置为返回布尔值) System.Data.EntitySqlException:“MyContext.MyFunction”无法解析为有效的类型构造函数或函数,位于WHERE谓词第6行第21列附近 问候 Lee我认为您不希望

是否可以在实体框架中的where子句中使用函数导入?我尝试了以下方法,但我得到了一个相当神秘的异常,我找不到任何有关该异常的信息:

var q = MyContext.MyEntities.Where("MyContext.MyFunction(it.ID)")
(该函数设置为返回布尔值)

System.Data.EntitySqlException:“MyContext.MyFunction”无法解析为有效的类型构造函数或函数,位于WHERE谓词第6行第21列附近

问候


Lee

我认为您不希望将此表达式作为字符串传递。您需要一个合适的lambda表达式,如:


其中(entity=>MyContext.MyFunction(entity.ID))

您试图编写的查询正在通过EntitySet上的查询组成对FunctionImport的调用

但由于FunctionImports是StoredProcess的包装,它们是不可组合的,所以这是行不通的

为了让这样的功能正常工作,理论上该函数需要是一个包装器,包装在一些可组合的东西上,比如TVF(表值函数)。但不幸的是,目前实体框架中不支持TVF


Alex

谢谢Jeremy-但是,由于函数没有返回实体(只是一个布尔值),它不存在于MyContext类中(尽管我可以通过和EntityClient成功调用它)。那么,它存在于哪里呢?只需在=>的右侧调用它,就像从其他任何地方调用一样。它不是实体框架生成的DataContext对象的成员,因为它不是实体返回函数-它是布尔返回函数。请查看Where扩展方法[1]的文档。Where方法接受函数(委托),该函数接受类型化实体并返回布尔值。我提供的lambda表达式(修改为语法正确,因为您指出它存在于MyContext以外的地方)可以很好地用作Where方法的过滤器,结果将是“通过”过滤器的实体集合。[1] 但这将导致客户机对where子句进行评估,不是吗?谢谢Alex-为我回到绘图板!在我的模型中,每个实体指的是另一个实体——A指的是B,C&D指的是E,B&E指的是F,等等。我想找到最终(直接和间接)指另一个实体的所有实体。我有一个存储过程,它可以遍历引用,以查找实体是否最终指向我要查找的实体。在SQL中容易,在EF中难:(你对我能做什么有什么建议吗?我可以编写返回实体的存储过程并只是“functionimport”它们,但是如果有很多存储过程,这很容易变得很难处理。Lee