Использование оператора LIKE в LINQ to Entity - PullRequest
2 голосов
/ 16 июня 2010

В настоящее время в нашем проекте мы используем Entity Framework и LINQ.Мы хотим создать функцию поиска, в которой клиент заполняет различные фильтры, но ему это не нужно.

Чтобы выполнить этот «динамический» запрос в LINQ, мы подумали об использовании оператора Like, который ищет либо полеили "%", чтобы получить все, если пользователь не заполнил это поле.

Шутка была о нас, когда мы обнаружили, что она не поддерживает Like.После некоторых поисков мы прочитали несколько ответов, в которых рекомендуется использовать StartsWith, но для нас это бесполезно.

Единственное решение, использующее что-то вроде:

ObjectQuery<Contact> contacts = db.Contacts;
if (pattern != "")
{
      contacts = contacts.Where(“it.Name LIKE @pattern”);
      contacts.Parameters.Add(new ObjectParameter(“pattern”, pattern);
}

Однако нам бы хотелосьпридерживаться только linq.

Удачного кодирования!

Ответы [ 2 ]

2 голосов
/ 08 декабря 2012

используйте это:

using System.Data.Objects.SqlClient;

... .Where(it => SqlFunctions.PatIndex("pat%", it.Name) > 0)
2 голосов
/ 16 июня 2010

Вы пробовали использовать Contains?

contacts.Contains(pattern);

См. Эту ссылку для краткого примера того, что генерирует LINQ.

http://davidhayden.com/blog/dave/archive/2007/11/23/LINQToSQLLIKEOperatorGeneratingLIKESQLServer.aspx

...