title: How do I query for items whose name contains one or more of any of a list of strings (in a way that translates to SQL)?
body: <p>I've written this query to find orders whose job title is something like &quot;Assistant Manager&quot; or &quot;mit1&quot; or &quot;mit2&quot;, etc.</p>
  <pre class="lang-cs prettyprint-override"><code>    var searchTerms = new List&lt;string&gt; { &quot;manager&quot;, &quot;mit&quot; };
  
      var report = await _context.Orders
          .Where(x =&gt;
              searchTerms.Any(searchTerm =&gt; x.JobTitle.Contains(searchTerm))
          )
          .Select(x =&gt; new {
              x.Id,
              x.JobNumber,
              x.JobTitle,
              x.DateOrdered
          })
          .OrderByDescending(x =&gt; x.DateOrdered)
          .Take(1000)
          .ToListAsync();
  </code></pre>
  <p>However, this doesn't translate to SQL. I get this error:</p>
  <pre><code>The LINQ expression 'DbSet&lt;Order&gt;
      .Where(o =&gt; __searchTerms_0
          .Any(searchTerm =&gt; o.JobTitle.Contains(searchTerm)))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). 
  </code></pre>
  <p>I understand the principle and will evaluate this on the client if absolutely necessary. But before I do that, is there a way to write this query in a way that will translate to SQL?</p>
  <p>I want a single field to contain (not match exactly but merely contain) any of the list of provided strings.</p>