Вы можете написать LINQ-запрос, который использует методы экземпляра на System.String
. Большинство поставщиков LINQ могут преобразовать это в операторы SQL. Например:
from customer in db.Customers
where customer.Name.Contains("foo") || customer.Name.Contains("bar")
select customer;
LINQ to Entities преобразует это в нечто вроде этого:
SELECT T1.*
FROM Customers T1
WHERE T1.Name LIKE '%' + @p1 + '%'
OR T1.Name LIKE '%' + @p2 + '%'
Обратите внимание, что когда вам нужно динамическое количество слов для поиска, вы можете использовать PredicateBuilder . Это позволяет создавать предикаты, содержащие операторы OR. Переписать его с профсоюзами также является эффективным методом. Например:
string[] searchWords;
// Define an empty set.
var customers =
from customer in db.Customers
where false
select customer;
// Union the empty set with a set for a word.
foreach (var temp in searchWords)
{
var searchWord = temp;
customers = customers.Union(
from customer in db.Customer
where customer.Name.Contains(searchWord)
select customer);
}