LINQ to Entities(SQL)中是否有一种方法可以识别指定字重复至少/少于指定次数的所有记录?
我可以在内存中执行此操作,使用以下方法查找“word”一词的至少3个实例:
Where(Function(x) x.Description.Split("word").Count > 3)
然而,Split()函数无法转换为SQL等价物,因此只能在内存中执行,这在涉及任意数量的记录时速度极慢。
执行此操作的SQL类似于
WHERE Description LIKE '%word%word%word%'
就我而言 - 我无法弄清楚如何获取LINQ to Entities生成的SQL。我尝试了这个丑陋的hacky .Where(Function(x) x.Description.Contains("word%word%word")
,但我几乎感到宽慰,因为它不起作用!
答案 0 :(得分:5)
<强> LINQ2SQL 强>
.Where (c => SqlMethods.Like(c.name, "word%word%word"));
<强> Linq2Entities 强>
见:http://jendaperl.blogspot.com/2011/02/like-in-linq-to-entities.html
和http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/6529a35b-6629-44fb-8ea4-3a44d232d6b9/
.Where("it.Name LIKE @searchTerm",
new ObjectParameter("searchTerm", "word%word%word"));
答案 1 :(得分:3)
试试这个:
.Where (x => SqlMethods.Like(x.Description, "word%word%word"));
从这里开始:http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/10/16/linq-to-sql-like-operator.aspx
答案 2 :(得分:2)
好吧似乎没有办法在LINQ to Entity中表达所需的LIKE子句......但是如何使用其他逻辑来检测字符串中的“3个单词”......比如:
Where(s => s.Description.Replace(" ", "").Replace("word", "").Length == s.Description.Replace(" ", "").Length - ("word".Length * 3) )
这完全变成了SQL。
答案 3 :(得分:-1)
您可以使用正则表达式:
.Where(Regex.Match(".+word.+word.+word.+",x.Description)
我对语法不太确定,但我认为你明白了。