我想运行一个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。
有没有做这个正确的方式?
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)。