如何在 Linq to Entities 查询中调用本地方法
本文关键字:调用 地方法 查询 Entities Linq to | 更新日期: 2023-09-27 18:30:43
我有以下代码:
public void SalesCount(string customerId)
{
..
..
return ...;
}
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.Where (c => SalesCount(c.CustomerId) < 100);
当我执行resultQuery时,我得到了SQL异常的转换。
我需要在"我在哪里可以做到这一点"中调用 SalesCount 是否有解决此问题的方法!
你根本做不到。你不能直接在SQL服务器上执行C#代码,你只能使用Expressions
和一些特殊的识别函数......
除非您在 LINQ 到对象中转换查询(至少部分转换)...
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.AsEnumerable()
.Where (c => SalesCount(c.CustomerId) < 100);
请注意,最后一个Where
将在客户端执行,因此将从数据库中获取许多无用的行。
尝试
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.ToArray()
.Where (c => SalesCount(c.CustomerId) < 100);
但是第二个Where
不是作为 SQL 运行,而是在本地运行 - 所有名称为"Alugili"的客户都是从数据库中提取的......
否则,您必须直接在 where 方法中将方法写为 lambda 表达式。
在两个 where 条件之间添加 &&。它会工作
是的,你可以。
但是您应该更改函数的返回类型:
public **int** SalesCount(string customerId)
{
..
..
return 500;
}
var resultQuery = dataContext.Customers.AsEnumerable()
.Where (c => c.Name == "Alugili" && SalesCount(c.CustomerId) < 100);