我想将内置的SQL 2012格式函数添加到静态函数类中,以便与LINQ to Entity Framework一起使用。
我跟着
这个
模拟添加内置SQL函数的源代码。
public static class ExtendSqlFunctions
{
[DbFunction("SqlServer", "FORMAT")]
public static string Format(Int64? arg, string formatType, string culture)
{
throw new NotSupportedException();
}
}
错误:
指定方法的System.String格式(System.Nullable`1
System.Int64
类型'ExtendSqlFunctions‘上的’LINQ,LINQ,LINQ)‘无法转换为LINQ to Entities存储表达式。
更新
通过将"FORMAT“添加到实体框架模型的SSDL中,我能够获得一个工作版本。
所以看起来微软在他们的内部库之外并不支持"DbFunction SqlServer“。
对此不确定?
http://msdn.microsoft.com/en-us/library/vstudio/bb738614(v=vs.100).aspx
(
http://msdn.microsoft.com/en-us/library/vstudio/bb738614(v=vs.100%29.aspx
)
如果有人知道如何在不编辑SSDL的情况下添加内置SQL函数,请让我知道。
更新
我已经在CodePlex上添加了这个问题
https://entityframework.codeplex.com/workitem/2586
"rjperes“将其添加为CodePlex上的讨论。
https://entityframework.codeplex.com/discussions/572518
发布于 2014-11-21 19:26:50
如果您正在使用Code First (从您的问题中不清楚),除了应用DbFunction属性之外,您还需要在OnModelCreating方法中在模型上注册函数。在DbFunction属性中设置的名称和命名空间必须与对EdmFunction.Create的调用匹配。请看这里的完整示例:
首先将SQL Server内置函数注册到实体框架代码
发布于 2021-02-17 21:58:44
EntityFramework.Functions
库提供了一种很好的方式来声明各种数据库函数并在C#代码中引用它们。格式函数可以声明为:
public static class DatabaseFunctions
{
[Function(FunctionType.BuiltInFunction, "FORMAT")]
public static string Format(decimal value, string format) => Function.CallNotSupported();
}
然后,它应该包含在DB context的OnModelCreating中:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ...
modelBuilder.Conventions.Add(new FunctionConvention(typeof(DatabaseFunctions)));
}
在此之后,它可以像这样使用
context.Items.Select(i => DatabaseFunctions.Format(i.Value, "0.00"));
https://stackoverflow.com/questions/27019790
复制相似问题