这是我的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。
我哪里错了?我该如何解决?
答案 0 :(得分:3)
由于linq查询转换为针对您的dB运行的SQL查询,因此无法将自定义函数转换为SQL查询。
解决问题的其他方法
将数据从SQL检索到内存,然后根据您的函数对其进行过滤。显而易见的缺点是,您将从数据库中检索许多行而不是所需的行
var paginas=(from Pagine page in kDataBase.Pagines).ToList().Where(p =>prova(p.title_it) == urlSuddivisa[i].ToLower()).FirstOrDefault();
是你想要的。
在旁注上我猜你的方法prova
不仅仅是返回字符串,否则函数完全没用,你也可以摆脱这个函数。此外,我相信您正在使用计数器i
对数组的数据库cos发出多个查询,您可以始终使用IN
查询并绕过它,记住数量的限制IN
查询中的元素。
答案 1 :(得分:3)
您的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方法。
答案 2 :(得分:1)
使用linq to sql
Expression tree
解析为SQL查询,而不是像linq to objects
一样运行它。
您的ORM提供程序不知道将方法转换为SQL。
您不应在linq to SQL
LINQ
次查询中使用方法。