2013-03-26 67 views

回答

12

随着文档状态EntityFunctions

提供公共语言运行时(CLR),该至Entities查询暴露概念 模型规范函数在LINQ方法。有关规范函数的信息 ,请参见规范函数(实体SQL)。

其中Canonical functions

由所有数据提供者的支持,并且可以通过所有查询 技术一起使用。规范函数不能由提供者扩展。 这些规范函数将被转换为提供者的相应数据源功能 。这允许功能 跨数据源以常见形式表示调用。

SQLFunctions

提供公共语言运行库(CLR)在LINQ to Entities查询调用函数中 数据库的方法。

因此,虽然这两组函数都被转换为原生SQL,但SQLFunctions是SQL Server特有的,而EntityFunctions则不是。

+0

我从你的答案明白的是,无论在SQL执行(如果我使用它)。对 ? – Dabbas 2013-03-26 12:55:55

+0

@dabbas是的,这是正确的 – Phil 2013-03-26 13:02:33

+0

好吧,我不相信这是真的。我只是不得不将所有'SqlFunctions.DateDiff'改为'DbContext.DiffDays',因为后面的'不能被翻译成....'并使用SqlServer 2012 local db ... – Leonardo 2015-08-20 17:37:55

5

当我读到它。 CLR将EntityFunctions函数转换为“规范函数”,它们受所有数据提供者支持。

但SqlFunctions使SQL Server做的工作,他们只为SQL Server指定。

For more information

4

SqlFunctions是在EF4引入一个静态类,并且是在装配System.Data.Entity。它包含一系列像Cos, DateAdd, DateDiff, DatePart, GetDate, Exp, Sign这样的方法,它们被映射到SQL Server函数。这些静态函数可以在LINQ to Entities查询中调用。

enter image description here

EF4还推出了静态EntityFunctions类。该类提供了可用于LINQ to Entities查询的概念模型规范函数。这些函数被映射到System.Data.Metadata.Edm命名空间中的函数,并且它们仅在概念模型中可用。

enter image description here

欲了解更多信息,请点击here