这是我的linq查询(Linq到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。
我哪里错了?我怎么才能修好它呢?
发布于 2012-04-15 11:58:43
由于linq查询被转换为针对您的dB运行的SQL查询,因此无法将您的自定义函数转换为SQL查询。
评估问题的其他方法
var paginas=(from Pagine page in kDataBase.Pagines).ToList().Where(p =>prova(p.title_it) == urlSuddivisa[i].ToLower()).FirstOrDefault();
是你想要的。
另外,我猜您的方法prova所做的不仅仅是返回字符串,否则函数是完全无用的,您也可以去掉这个函数。另外,我相信您正在向数据库激发多个查询,因为您使用的是一个计数器i所使用的数组--您可以始终使用IN查询并绕过它,记住对IN查询中元素数量的限制。
发布于 2012-04-15 12:02:55
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-15 11:59:06
使用linq to sql,Expression tree被解析为SQL查询,而不是像linq to objects那样运行它。
您的ORM提供程序不知道如何将该方法转换为SQL。
不应该在linq to SQL LINQ查询中使用方法。
https://stackoverflow.com/questions/10161813
复制相似问题