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