为什么我不能在linq查询中调用函数?

这是我的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。

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

由于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不仅仅是返回字符串,否则函数完全没用,你也可以摆脱这个function。 此外,我相信您正在使用计数器对数组的数据库cos发出多个查询,您可以始终使用IN查询并绕过它,记住IN查询中元素数量的限制。

您的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方法。

使用linq to sqlExpression tree被解析为SQL查询,而不是像运行linq to objects一样运行它。

您的ORM提供程序不知道将方法转换为SQL的热点。

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