在 LINQ to Entities 查询中调用自定义标量数据库函数?
Calling a custom scalar DB function inside a LINQ to Entities query?
有没有一种方法可以调用自定义标量数据库函数作为我的 LINQ to Entities 查询的一部分?我在网上唯一能找到的是这个页面:
然而,此处给出的说明似乎假设您使用的是数据库优先方法,并讨论修改 .edmx
文件。如果您使用代码优先方法怎么办?我希望能够写出这样的东西:
var result = await (
from itm in _itemDataContext.Items
where
itm.QryGroup1 == "Y" &&
_itemDataContext.Dbo_MyCustomScalarIntFn(itm.QryGroup2) > 0
).ToArrayAsync();
我认为您可以使用 ExecuteSqlCommand,但您必须硬编码 sql 以针对 BD 执行,如下所示:
var result = await (
from itm in _itemDataContext.Items
where
itm.QryGroup1 == "Y" &&
_itemDataContext.Database.ExecuteSqlCommand("Exec yourFunction "+itm.QryGroup2) > 0
).ToArrayAsync();
我没有测试过,但应该可以解决你的问题。
原来这个功能没有内置到 Entity Framework 所以我不得不使用 NuGet 包 (CodeFirstFunctions) 来获得它:
IItemDataContext
[DbFunction("CodeFirstDatabaseSchema", "fn_IsCorrectProduct")]
bool Fn_IsCorrectProduct(string companyID, string itemCode);
ItemDataContext
[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();
}
有没有一种方法可以调用自定义标量数据库函数作为我的 LINQ to Entities 查询的一部分?我在网上唯一能找到的是这个页面:
然而,此处给出的说明似乎假设您使用的是数据库优先方法,并讨论修改 .edmx
文件。如果您使用代码优先方法怎么办?我希望能够写出这样的东西:
var result = await (
from itm in _itemDataContext.Items
where
itm.QryGroup1 == "Y" &&
_itemDataContext.Dbo_MyCustomScalarIntFn(itm.QryGroup2) > 0
).ToArrayAsync();
我认为您可以使用 ExecuteSqlCommand,但您必须硬编码 sql 以针对 BD 执行,如下所示:
var result = await (
from itm in _itemDataContext.Items
where
itm.QryGroup1 == "Y" &&
_itemDataContext.Database.ExecuteSqlCommand("Exec yourFunction "+itm.QryGroup2) > 0
).ToArrayAsync();
我没有测试过,但应该可以解决你的问题。
原来这个功能没有内置到 Entity Framework 所以我不得不使用 NuGet 包 (CodeFirstFunctions) 来获得它:
IItemDataContext
[DbFunction("CodeFirstDatabaseSchema", "fn_IsCorrectProduct")]
bool Fn_IsCorrectProduct(string companyID, string itemCode);
ItemDataContext
[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();
}