我意外地看到System.Data.Common.CommandTrees.ExpressionBuilder.EdmFunctions
静态类,其中包含System.Data.Common.CommandTrees.DbExpression
上的一组扩展方法,如AddDays,Concat,....将System.Data.Common.CommandTrees.DbFunctionExpression
作为返回类型返回,这个静态方法如果需要参数,它们只接受System.Data.Common.CommandTrees.DbExpression
类型,另外我查看System.Data.Common.CommandTrees.DbExpression
,我看到这个类是抽象的,通过它的静态成员,你可以创建一个{{1并将它们发送到System.Data.Common.CommandTrees.DbExpression
以使用其扩展方法
我的问题是:
System.Data.Common.CommandTrees.ExpressionBuilder.EdmFunctions
,并作为canonical functions
中使用的辅助方法,例如Linq
方法或System.Data.Objects.EntityFunctions
'方法?虽然有一个名为System.Data.Objects.SqlClient.SqlFunctions
的属性,您可以创建System.Data.Metadata.Edm.EdmFunction
个函数并将其映射到已创建的CLR
,以便在model-defined functions
中使用,
答案 0 :(得分:4)
这些方法不适合一般消费,您继续在客户端代码中使用SqlFunctions
或EntityFunctions
。它们是可以在任意提供程序上执行的规范函数的库存实现。 Microsoft包括XML,BCL集合和Entity SQL的提供程序。其他人可以创建一个提供商,比如他们自己的dbase引擎或ORM。
执行查询理解时,从EntityFunctions.AddDays()
到EdmFunctions.AddDays()
的映射会动态发生。