查找单词重复处的值

本文关键字:单词重 查找 | 更新日期: 2023-09-27 18:00:40

LINQ to Entities(SQL)中是否有一种方法可以识别指定单词重复次数至少/少于指定次数的所有记录?

我可以在内存中这样做,使用查找至少3个单词"word"的实例

Where(Function(x) x.Description.Split("word").Count > 3)

然而,Split()函数无法转换为SQL等效函数,因此只能在内存中执行,当涉及任何数量的记录时,内存都会非常缓慢。

实现这一点的SQL将类似于

WHERE Description LIKE '%word%word%word%'

这就是我所知道的——我不知道如何让LINQ to Entities生成SQL。我尝试了丑陋的破解版.Where(Function(x) x.Description.Contains("word%word%word"),但它不起作用,我几乎松了一口气!

查找单词重复处的值

Linq2SQL

.Where (c => SqlMethods.Like(c.name, "word%word%word"));

Linq2实体
请参阅: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")); 

试试这个:

.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

似乎没有办法在LINQ to Entity中表达所需的LIKE子句。。。但是,使用其他一些逻辑来检测字符串中的"3个单词"呢。。类似于:

Where(s => s.Description.Replace(" ", "").Replace("word", "").Length == s.Description.Replace(" ", "").Length - ("word".Length * 3) )

这完全变成了SQL。

您可以使用正则表达式:

.Where(Regex.Match(".+word.+word.+word.+",x.Description)

我对语法不太确定,但我想你已经明白了。