Как искать одну и ту же строку поиска в нескольких столбцах? - PullRequest
2 голосов
/ 03 мая 2011

Я ищу строку ввода из текстового поля управления в модели данных EF. Может ли кто-нибудь помочь мне создать предложение where в файле кода, чтобы сделать это. Я попробовал приведенный ниже фрагмент кода в коде, хотя он компилируется и выдает ошибку, когда я ввожу строку поиска и отправляю запрос.

Where("it.[CaseName] like '%'" + searchString +
    "'%' or it.[CaseNumber] like '%'" + searchString +
    "'%' or it.[AppRegNumber] like '%'" + searchString +
    "'%' or it.[SSNo] like '%'" + searchString + "'%'")

Когда это же условие where использовалось в разметке элемента управления EntityDataSource, оно правильно принимает и выполняет поиск. Я нахожусь в процессе изменения своих страниц, чтобы использовать элемент управления ObjectDataSource для подключения к классу уровня бизнес-логики, а не напрямую к модели данных EDM.

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

Если вы хотите использовать метод Where Query Builder ObjectQuery (я думаю, это то, что вы используете в своем вопросе), вам нужно удалить внутренние одинарные кавычки из выражения запроса:

Where("it.[CaseName] like '%" + searchString +
    "%' or it.[CaseNumber] like '%" + searchString +
    "%' or it.[AppRegNumber] like '%" + searchString +
    "%' or it.[SSNo] like '%" + searchString + "%'")

Или как параметризованный запрос:

Where("it.[CaseName] like @search" +
    " or it.[CaseNumber] like @search" +
    " or it.[AppRegNumber] like @search" +
    " or it.[SSNo] like @search",
    new ObjectParameter("search", string.Concat("%", searchString, "%")))

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

Не использовать первую версию, если searchString поступает из пользовательского ввода в Интернетестраница, так как эта версия уязвима для SQL-инъекции (введите этот термин в поисковик для объяснения).Вместо этого используйте параметризованный запрос во второй версии.

0 голосов
/ 03 мая 2011

Ну, вы можете использовать методы расширения Linq:

.Where(r => r.CaseName.IndexOf(searchString) >= 0
    || r.CaseNumber.IndexOf(searchString) >= 0
    || r.AppRegNumber.IndexOf(searchString) >= 0
    || r.SSNo.IndexOf(searchString) >= 0)
...