10

我有以下代码:

public void SalesCount(string customerId)
{
  ..
  ..
  return ...;
}

var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.Where (c => SalesCount(c.CustomerId) < 100);

当我执行 resultQuery 时,我得到了 SQL 异常的翻译。

我需要在Where can I do that 中调用SalesCount是否有解决此问题的方法!

4

4 回答 4

12

简直不能。你不能直接在 SQL 服务器上执行 C# 代码,你只能使用Expressions和一些特殊的识别函数......

除非您在 LINQ-to-Objects 中转换您的查询(至少部分)...

var resultQuery = dataContext.Customers
    .Where (c => c.Name == "Alugili")
    .AsEnumerable()
    .Where (c => SalesCount(c.CustomerId) < 100);

请注意,最后一个Where将在客户端执行,因此将从数据库中获取许多无用的行。

于 2013-09-10T09:12:20.733 回答
2

尝试

var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.ToArray()
.Where (c => SalesCount(c.CustomerId) < 100);

但是第二个Where不是作为 SQL 运行,而是在本地运行 - 所有名为“Alugili”的客户都从数据库中提取......

否则你必须直接在 where 方法中写出你的方法作为 lambda 表达式。

于 2013-09-10T09:11:54.753 回答
-1

在两个 where 条件之间添加 && ..它会起作用

于 2013-09-10T09:19:58.710 回答
-2

是的你可以。

但是您应该更改函数的返回类型:

public **int** SalesCount(string customerId)
{
  ..
  ..
  return 500;
}


var resultQuery = dataContext.Customers.AsEnumerable()
                 .Where (c => c.Name == "Alugili" && SalesCount(c.CustomerId) < 100);
于 2013-09-10T09:12:29.317 回答