什么是'EdmFunctions'?

时间:2014-02-06 15:45:41

标签: c# linq entity-framework linq-to-entities clr

我意外地看到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中使用,

  • 这些之间有关系吗?
你可以附上任何样品吗?或链接到任何文件?

1 个答案:

答案 0 :(得分:4)

这些方法不适合一般消费,您继续在客户端代码中使用SqlFunctionsEntityFunctions。它们是可以在任意提供程序上执行的规范函数的库存实现。 Microsoft包括XML,BCL集合和Entity SQL的提供程序。其他人可以创建一个提供商,比如他们自己的dbase引擎或ORM。

执行查询理解时,从EntityFunctions.AddDays()EdmFunctions.AddDays()的映射会动态发生。