LINQ: Строка строки Entity содержит любой массив строк

Я хочу получить коллекцию объектов Product, где свойство product.Description содержит любое из слов в массиве строк.

Это будет выглядеть примерно так (результатом будет любой продукт, в слове «горчица ИЛИ» «соленые огурцы» или «смаковать» в тексте описания):

Dim products As List(Of ProductEntity) = New ProductRepository().AllProducts Dim search As String() = {"mustard", "pickles", "relish"} Dim result = From p In products _ Where p.Description.Contains(search) _ Select p Return result.ToList 

Я уже рассматривал этот подобный вопрос, но не мог заставить его работать.

Поскольку вы хотите увидеть, содержит ли поиск слово, содержащееся в описании p, вам в основном нужно проверить каждое значение в поиске, если оно содержится в описании p

 result = from p in products where search.Any(val => p.Description.Contains(val)) select p; 

Это синтаксис c # для lambda-метода, так как мой vb не так уж хорош

 Dim result = From p in products _ Where search.Any(Function(s) p.Description.Contains(s)) Select p 

Вы можете использовать простой запрос LINQ, если вам нужно только проверить подстроки:

 var q = words.Any(w => myText.Contains(w)); // returns true if myText == "This password1 is weak"; 

Если вы хотите проверить целые слова, вы можете использовать регулярное выражение:

  1. Согласование с регулярным выражением, которое является дизъюнкцией всех слов:

     // you may need to call ToArray if you're not on .NET 4 var escapedWords = words.Select(w => @"\b" + Regex.Escape(w) + @"\b"); // the following line builds a regex similar to: (word1)|(word2)|(word3) var pattern = new Regex("(" + string.Join(")|(", escapedWords) + ")"); var q = pattern.IsMatch(myText); 
  2. Разделение строки на слова с регулярным выражением и тестирование для членства в коллекции слов (это будет быстрее, если вы используете make-слова в HashSet вместо List ):

     var pattern = new Regex(@"\W"); var q = pattern.Split(myText).Any(w => words.Contains(w)); 

Чтобы отфильтровать набор предложений в соответствии с этим критерием, все, что вам нужно сделать, включить его в функцию и вызвать Where :

  // Given: // bool HasThoseWords(string sentence) { blah } var q = sentences.Where(HasThoseWords); 

Или положите его в лямбду:

  var q = sentences.Where(s => Regex.Split(myText, @"\W").Any(w => words.Contains(w))); 

Ans From => Как проверить, содержит ли какое-либо слово в моем списке в тексте @R. Martinho Fernandes

  • Как искать строку в нескольких файлах и возвращать имена файлов в Powershell?
  • Почему .NET String неизменяема?
  • Разделить строку на строковый массив одиночных символов
  • Преобразовать текст camelCaseText в текст предложения
  • Получить строку между двумя строками в строке
  • Возврат строки из функции C
  • Когда лучше использовать String.Format vs string concatenation?
  • C # разделите строку, но сохраните раздельные символы / разделители
  • Объявления загружаются, но не отображаются?
  • Как объединить строки в Swift?
  • Как настроить ProviderManifestToken для EF Code First
  • Давайте будем гением компьютера.