繁体   English   中英

查找重复单词的值

[英]Find values where a word is repeated

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

我可以在 memory 中执行此操作,使用以下方法查找单词“word”的至少 3 个实例:

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

但是,Split() function 不能转换为 SQL 等效项,因此只能在内存中执行,这在涉及任意数量的记录时速度非常慢。

执行此操作的 SQL 类似于

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

据我所知 - 我无法弄清楚如何将 LINQ 生成的 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 中所需的 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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM