我有以下代码:
public void SalesCount(string customerId)
{
..
..
return ...;
}
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.Where (c => SalesCount(c.CustomerId) < 100);
当我执行resultQuery时,我得到了SQL异常的翻译。
我需要在其中中调用 SalesCount ,我是否可以解决此问题?
答案 0 :(得分:12)
简单地说,你不能。您不能直接在SQL服务器上执行C#代码,只能使用Expressions
和一些特殊识别的函数...
除非您在LINQ-to-Objects ...
中转换查询(至少部分)var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.AsEnumerable()
.Where (c => SalesCount(c.CustomerId) < 100);
请注意,最后一个Where
将在客户端执行,因此将从数据库中提取许多无用的行。
答案 1 :(得分:2)
尝试
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.ToArray()
.Where (c => SalesCount(c.CustomerId) < 100);
但是第二个Where
不是作为SQL运行而是在本地运行 - 所有名为“Alugili”的客户都从数据库中提取......
否则,您必须直接在where方法中将您的方法写为lambda表达式。
答案 2 :(得分:0)
添加&amp;&amp;在两个条件之间......它会起作用
答案 3 :(得分:-2)
但您应该更改函数的返回类型:
public **int** SalesCount(string customerId)
{
..
..
return 500;
}
var resultQuery = dataContext.Customers.AsEnumerable()
.Where (c => c.Name == "Alugili" && SalesCount(c.CustomerId) < 100);