为什么我不能叫LINQ查询里面的函数?(Why I can't call a functio

2019-09-16 13:07发布

这是我的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;
}             

它说 :

有不支持转换到SQL中为方法“System.String PROVA(System.String)。

我在哪里错了? 我该如何解决?

Answer 1:

由于LINQ查询被转换为对你的分贝运行SQL查询它是不是能够自定义函数转换成SQL查询。

appraoaching问题的替代方法

  • 使用存储过程和阅读有关LINQ使用存储过程
  • 检索SQL数据到内存,然后根据你的函数的过滤。 显然这里的缺点是,你会从数据库比需要什么来获取很多很多的行数

    var paginas=(from Pagine page in kDataBase.Pagines).ToList().Where(p =>prova(p.title_it) == urlSuddivisa[i].ToLower()).FirstOrDefault();

    是你想要的。

在一个侧面说明,我猜你的方法prova并不仅仅是返回字符串更加否则功能是完全没用的,你可能也摆脱功能。 此外,我相信你是射击多个查询到数组的数据库COS,你使用的是有一个计数器i ,你总是可以使用IN查询,并围绕它得到的,记得元素的数量限制在IN查询。



Answer 2:

您的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方法然后可以评价拉页到存储器中。



Answer 3:

随着linq to sqlExpression tree得到解析,SQL查询,而不是仅仅运行它喜欢它是linq to objects

你的ORM提供者不知道烫法转换为SQL。

你不应该使用的方法linq to SQL LINQ查询。



文章来源: Why I can't call a function inside a linq query?