Как использовать подстановочные знаки SQL в LINQ to Entity Framework - PullRequest
6 голосов
/ 24 марта 2011

У меня есть запрос, который выглядит так:

IQueryable<Profile> profiles = from p in connection.Profiles
    where profile.Email.Contains(txtSearch)
    select p;

Я знаю, что при преобразовании в SQL он использует LIKE '%<value of txtSearch>%', но если txtSearch = "jon%gmail.com", он преобразует его в `LIKE '% jon~% gmail.com%.~ Избегает% в середине, который является символом подстановки.Как мне обойти это?Мне нужно иметь возможность вставлять подстановочные знаки в мои запросы LINQ to EF.

1 Ответ

2 голосов
/ 25 марта 2011

Я не уверен, что это возможно напрямую с помощью linq, потому что вы можете вызывать только основные строковые функции, такие как Contains, StartsWith или EndsWith Это возможно с Entity SQL , поэтому вы можете комбинировать эти подходы.

var query = new ObjectQuery<Profile>(
    @"SELECT VALUE p
      FROM CsdlContainerName.Profiles AS p
      WHERE p.Email LIKE '" + wildcardSearch + "'",
    context);

var result = query.AsQueryable().OrderByDescending(p => p.Name).ToList();

ESQL-инъекция наносит ответный удар:)

Вторая версия без уязвимости внедрения (я не пробовал, но она должна работать):

var commandText =
    @"SELECT VALUE p
      FROM CsdlContainerName.Profiles AS p
      WHERE p.Email LIKE @search";

var query = new ObjectQuery<Profile>(commandText, context);
query.Parameters.Add(new ObjectParameter("search", wildcardSearch));

var result = query.AsQueryable().OrderByDescending(p => p.Name).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...