繁体   English   中英

如何在Linq to Entities查询中调用本地方法?

[英]How can I call local method in Linq to Entities query?

我有以下代码:

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-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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM