为什么我不能在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 sql
, Expression tree
被解析为SQL查询,而不是像运行linq to objects
一样运行它。
您的ORM提供程序不知道将方法转换为SQL的热点。
您不应该在linq to SQL
LINQ
查询中的方法。