如何在 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 是否有解决此问题的方法!

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

你根本做不到。你不能直接在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);