2

这是我的 linq 查询(Linq to Sql):

pagina = (from Pagine page in kDataBase.Pagines
          where prova(page.title_it) == urlSuddivisa[i].ToLower()
          select page).FirstOrDefault();

这是我调用的函数(在同一个类中):

private string prova(string example)
{
    return example;
}             

它说 :

方法'System.String prova(System.String)不支持转换为sql。

我哪里错了?我该如何解决?

4

3 回答 3

4

您的 linq 查询表达式在运行时被转换为 sql,框架不知道如何将 prova 方法调用转换为适当的 sql。相反,您可以执行以下操作:

pagina = (from Pagine page in kDataBase.Pagines select page).ToList().Where(p => prova(p.title_it) == urlSuddivisa[i].ToLower()).FirstOrDefault();

这将首先通过 toList 将页面拉入内存,然后可以评估 prova 方法。

于 2012-04-15T12:02:55.867 回答
3

由于 linq 查询被转换为针对您的 dB 运行的 SQL 查询,因此无法将您的自定义函数转换为 SQL 查询。

解决问题的替代方法

  • 使用存储过程并阅读有关在 linq 中使用存储过程的信息
  • 将您的数据从 SQL 检索到内存,然后根据您的函数对其进行过滤。显然,这里的缺点是您将从数据库中检索的行数比所需的多得多

    var paginas=(from Pagine page in kDataBase.Pagines).ToList().Where(p =>prova(p.title_it) == urlSuddivisa[i].ToLower()).FirstOrDefault();

    是你想要的。

在旁注中,我猜您的方法prova不仅仅是返回字符串,否则该函数完全没用,您也可以摆脱该函数。此外,我相信您正在向您使用计数器的数组的数据库 cos 发起多个查询,i您始终可以使用IN查询并绕过它,记住IN查询中元素数量的限制。

于 2012-04-15T11:58:43.003 回答
1

使用get 解析为 SQL 查询linq to sqlExpression tree而不是像使用linq to objects.

您的 ORM 提供者不知道如何将方法转换为 SQL。

您不应该在linq to SQL LINQ查询中使用方法。

于 2012-04-15T11:59:06.127 回答