Найти значения, где слово повторяется - PullRequest
2 голосов
/ 30 июня 2011

Есть ли способ в LINQ to Entities (SQL) идентифицировать все записи, в которых указанное слово повторяется по крайней мере / меньше указанного числа раз?

Я могу сделать это в памяти, ища как минимум 3 экземпляра слова «слово», используя:

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

Однако функция Split () не может преобразоваться в эквивалент SQL, и поэтому она может выполняться только в оперативной памяти, что мучительно медленно, когда задействовано любое количество записей.

SQL для этого будет выглядеть примерно так:

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

И, насколько я понимаю, я не могу понять, как получить этот SQL, сгенерированный LINQ для сущностей. Я попробовал уродливый хакер .Where(Function(x) x.Description.Contains("word%word%word") в случайном порядке, но я почти рад, что это не работает!

Ответы [ 4 ]

5 голосов
/ 30 июня 2011

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")); 
3 голосов
/ 30 июня 2011

Попробуйте:

.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 голосов
/ 30 июня 2011

Ну, кажется, нет способа выразить требуемое предложение LIKE в LINQ to Entity ... Но как насчет использования некоторой другой логики для обнаружения "3 слов" в строке ... что-то вроде:

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

Это полностью превращено в SQL.

0 голосов
/ 30 июня 2011

Вы можете использовать регулярное выражение для этого:

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

Я не совсем уверен в синтаксисе, но я думаю, вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...