在LINQ to Entities查询中调用自定义标量数据库函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在LINQ to Entities查询中调用自定义标量数据库函数?相关的知识,希望对你有一定的参考价值。
有没有办法可以将自定义标量数据库函数称为LINQ to Entities查询的一部分?我在网上唯一能找到的就是这个页面:
但是,这里给出的说明似乎假设您正在使用DB-first方法并讨论修改.edmx
文件。如果您使用代码优先方法呢?我希望能够写出这样的东西:
var result = await (
from itm in _itemDataContext.Items
where
itm.QryGroup1 == "Y" &&
_itemDataContext.Dbo_MyCustomScalarIntFn(itm.QryGroup2) > 0
).ToArrayAsync();
答案
原来这个功能没有内置在Entity Framework中,所以我不得不使用NuGet包(CodeFirstFunctions)来获取它:
IItemDataContext
[DbFunction("CodeFirstDatabaseSchema", "fn_IsCorrectProduct")]
bool Fn_IsCorrectProduct(string companyID, string itemCode);
Item DataContext
[DbFunction("CodeFirstDatabaseSchema", "fn_IsCorrectProduct")]
public bool Fn_IsCorrectProduct(string companyID, string itemCode)
{
// UDF is described in DbFunction attribute; no need to provide an implementation...
throw new NotSupportedException();
}
另一答案
我认为你可以使用ExecuteSqlCommand,但你必须硬编码要对BD执行的sql,如下所示:
var result = await (
from itm in _itemDataContext.Items
where
itm.QryGroup1 == "Y" &&
_itemDataContext.Database.ExecuteSqlCommand("Exec yourFunction "+itm.QryGroup2) > 0
).ToArrayAsync();
我没有测试过,但应该解决你的问题。
以上是关于在LINQ to Entities查询中调用自定义标量数据库函数?的主要内容,如果未能解决你的问题,请参考以下文章
在 LINQ to Entities 查询中无法构造实体或复杂类型
在 Linq-to-Entities 查询中格式化日期会导致异常