查找重复单词的值

时间:2011-06-30 10:40:41

标签: c# vb.net linq linq-to-sql linq-to-entities

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"),但我几乎感到宽慰,因为它不起作用!

4 个答案:

答案 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)

我对语法不太确定,但我认为你明白了。