Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我能';在linq查询中不调用函数?_C#_.net_Linq_Linq To Sql - Fatal编程技术网

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

C# 为什么我能';在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查询(linq到Sql):

这是我调用的函数(在同一个类中):

它说:

不支持将方法“System.String prova(System.String)”转换为sql


我错在哪里?如何修复它呢?

由于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();