C# 为什么我能';在linq查询中不调用函数?
这是我的linq查询(linq到Sql): 这是我调用的函数(在同一个类中): 它说: 不支持将方法“System.String prova(System.String)”转换为sqlC# 为什么我能';在linq查询中不调用函数?,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,这是我的linq查询(linq到Sql): 这是我调用的函数(在同一个类中): 它说: 不支持将方法“System.String prova(System.String)”转换为sql 我错在哪里?如何修复它呢?由于linq查询被转换为针对数据库运行的SQL查询,因此无法将自定义函数转换为SQL查询 处理这个问题的其他方法 使用存储过程并阅读有关在linq中使用存储过程的内容 将数据从SQL检索到内存,然后根据函数对其进行过滤。显然,这里的缺点是从数据库中检索的行数比所需的要多 var pag
我错在哪里?如何修复它呢?由于linq查询被转换为针对数据库运行的SQL查询,因此无法将自定义函数转换为SQL查询 处理这个问题的其他方法
- 使用存储过程并阅读有关在linq中使用存储过程的内容
- 将数据从SQL检索到内存,然后根据函数对其进行过滤。显然,这里的缺点是从数据库中检索的行数比所需的要多
var paginas=(来自kDataBase.Pagines.ToList()中的Pagine页面)。其中(p=>prova(p.title_it)==urlSuddivisa[i]。ToLower()).FirstOrDefault()代码> 这就是你想要的
另一方面,我猜你的方法
prova
不仅仅是返回字符串,否则函数完全没有用处,你也可以去掉函数。另外,我相信您正在对使用计数器I
的阵列的数据库cos启动多个查询,您可以始终使用中的查询并绕过它,请记住
查询中中元素数量的限制。由于linq查询转换为针对数据库运行的SQL查询,因此无法将自定义函数转换为SQL查询
处理这个问题的其他方法
- 使用存储过程并阅读有关在linq中使用存储过程的内容
- 将数据从SQL检索到内存,然后根据函数对其进行过滤。显然,这里的缺点是从数据库中检索的行数比所需的要多
var paginas=(来自kDataBase.Pagines.ToList()中的Pagine页面)。其中(p=>prova(p.title_it)==urlSuddivisa[i]。ToLower()).FirstOrDefault()代码>
这就是你想要的
另一方面,我猜你的方法prova
不仅仅是返回字符串,否则函数完全没有用处,你也可以去掉函数。另外,我相信您正在对使用计数器I
的阵列的数据库cos启动多个查询,您可以始终使用中的查询并绕过它,请记住对查询中元素数量的限制。使用linq to sql
将表达式树解析为sql查询,而不是像使用linq to对象那样运行它
您的ORM提供程序不知道如何将该方法转换为SQL
您不应该在linq to SQL
linq
查询中使用方法。使用linq to SQL
将表达式树
解析为SQL查询,而不是像使用linq to对象一样运行它
您的ORM提供程序不知道如何将该方法转换为SQL
您不应该在linq to SQL
linq
查询中使用方法。您的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查询表达式在运行时被转换为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在编译时尝试将您的方法转换为可以在数据库上执行的方法。它将消除大量重复的代码。因为我最终要做的是复制并粘贴我试图调用Where语句的方法中的代码。我打赌总有一天这种特性会出现。我自己刚刚遇到这个问题,我想我希望Linq在编译时尝试将您的方法转换成可以在数据库上执行的东西。它将消除大量重复的代码。因为我最终要做的是复制并粘贴我试图调用Where语句的方法中的代码。我打赌有一天这种功能会出现。
pagina = (from Pagine page in kDataBase.Pagines select page).ToList().Where(p => prova(p.title_it) == urlSuddivisa[i].ToLower()).FirstOrDefault();