LINQ to SQL的 - 自定义函数(LINQ to SQL - custom function

2019-10-18 05:23发布

我想运行一个LINQ查询是这样的:

var words = from p in db.Words
   where p.Document.Corpus.Name == corpus
   //where LevenshteinDistance(p.Text.ToCharArray(), word.ToCharArray()) < threshold
   select p;

但是,如果我放在“编辑距离”功能在那里它会产生一个错误:

NotSupportedException异常:方法 '的char [] ToCharArray()' 有没有支持转换为SQL。

有没有做这个正确的方式?

Answer 1:

LINQ to SQL的尝试将整个表达式转换成SQL。 如果你想运行SQL Server上的距离函数,你需要定义一个SQL Server UDF和地图自定义的CLR方法了这一点。 如果你的内容来获取所有结果,然后在距离过滤功能的客户端,使用AsEnumerable():

var words = (from p in db.Words
             where p.Document.Corpus.Name == corpus)
             select p)
            .AsEnumerable()
            .Where(p => /* distance function */ < threshold);

该AsEnumerable力的LINQ to SQL枚举查询结果,使查询的其余部分使用LINQ to Objects和你的距离代表来解决(而不是被转换为SQL)。



文章来源: LINQ to SQL - custom function