LINQ: Entity string field contains any of an array of strings

后端 未结 3 1638
傲寒
傲寒 2020-12-01 04:28

I want to get a collection of Product entities where the product.Description property contains any of the words in a string array.

It would look something like this

相关标签:
3条回答
  • 2020-12-01 04:47

    You can use a simple LINQ query, if all you need is to check for substrings:

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

    If you want to check for whole words, you can use a regular expression:

    1. Matching against a regular expression that is the disjunction of all the words:

      // 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. Splitting the string into words with a regular expression, and testing for membership on the words collection (this will get faster if you use make words into a HashSet instead of a List):

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

    In order to filter a collection of sentences according to this criterion all you have to do its put it into a function and call Where:

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

    Or put it in a lambda:

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

    Ans From => How to check if any word in my List<string> contains in text by @R. Martinho Fernandes

    0 讨论(0)
  • 2020-12-01 04:52
    Dim result = From p in products _
                 Where search.Any(Function(s) p.Description.Contains(s))
                 Select p
    
    0 讨论(0)
  • 2020-12-01 04:59

    Since you want to see if search contains a word which is contained in the description of p you basically need to test for each value in search if it is contained in the description of p

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

    This is c# syntax for the lambda method since my vb is not that great

    0 讨论(0)
提交回复
热议问题