динамическое поле с linqToEntity (c #) - PullRequest
0 голосов
/ 25 августа 2011

мой код:

        public List<tblBook> GetBook(string NameField, string Value)
        {
            return (this.Entities.Book.Where(
            "it.@p0 NOT LIKE @p1",

new ObjectParameter("p0", string.Format("%{0}%", NameField)),

new ObjectParameter("p1", string.Format("%{0}%", Value)))).ToList();

        }

ошибка:

Синтаксис запроса недействителен. Ближайший термин '@ p0', строка 6, столбец 7.

1 Ответ

1 голос
/ 25 августа 2011

Поля должны быть статическими.Вы не можете использовать подстановочные знаки в имени поля.Это расширение Where только строит запрос Entity SQL внутри.Entity SQL следует тем же правилам, что и обычный SQL.

Редактировать:

Правильный код:

public List<tblBook> GetBook(string NameField, string Value)
{
    return this.Entities.Book.Where(
               String.Format("it.{0} NOT LIKE @p0", NameField),
               new ObjectParameter("p0", string.Format("%{0}%", Value))).ToList();
    }
}

Вы должны передать имя всего поля и подтвердить его - EntityТакже существуют SQL-инъекции.

...