Как я могу искать в базе данных с помощью WPF и модели Linq-to-entity - PullRequest
0 голосов
/ 04 декабря 2009

Я готовлю проект WPF, где хочу реализовать более сложный поиск. Я использую LINQ для сущностей через модель сущностей ADO.NET и планирую сделать отображение в WPFToolkit DataGrid.

Мое окно поиска должно разрешать поиск по нескольким различным критериям. Моя идея заключается в том, чтобы иметь возможность писать (например) текстовые поля имени, фамилии и рода занятий в приложении и получать список всех людей в выбранной таблице, которые соответствуют всем 3 параметрам поиска. Я хочу иметь возможность поиска, когда все введены или даже если только один введен.

Я полагаю, что другой вариант - привязать форму к базе данных ... но я не знаю, как искать подобным образом (я знаю, как отображать информацию, редактировать ее и вставлять ... но не искать) .

Я, хотя и применяю строку к механизму запросов, но напрасно. Кажется, это не работает. Пожалуйста, поделитесь некоторыми идеями о том, как я могу это сделать. Любой источник или фрагмент кода будут оценены.

Спасибо!

Ответы [ 4 ]

1 голос
/ 04 декабря 2009

ОК, вот окончательное решение, которое я получил, и оно работает.

var sQuery = from x in dataContext.Patients
             select x;
if (!string.IsNullOrEmpty(serName.Text))
    sQuery = sQuery.Where(x => x.Name.Contains(serName.Text));

if (!string.IsNullOrEmpty(serSurame.Text))
    sQuery = sQuery.Where(x => x.Surname.Contains(serSurame.Text));

Большое спасибо за помощь!

1 голос
/ 04 декабря 2009

Linq позволяет очень легко составлять запросы, чтобы вы могли создавать их из более простых строительных блоков. Существует также широкий спектр уровней, на которые вы можете перейти для такой системы. У вас может быть система, в которой общая форма запроса является статической, что является вашим стандартным запросом Linq, но вы можете полностью использовать собственный формат описания запроса, который затем преобразуете в оператор Linq.

Похоже, в вашем случае у вас есть всего несколько возможных фильтров. Вы можете сделать это так:

var Query = Context.MyDataSet; //Whatever is the standard base query

if (!string.IsNullOrEmpty(NameFilter))
    Query = Query.Where(e => e.Name.Contains(NameFilter));

if (!string.IsNullOrEmpty(SurnameFilter))
    Query = Query.Where(e => e.Surname.Contains(SurnameFilter));

...

var Result = Query.ToList(); 

Пока у вас есть фиксированный набор параметров, по которым пользователи могут искать, вы можете продвинуться довольно далеко с этим методом построения запросов, дополнительно добавив фильтры.

0 голосов
/ 04 декабря 2009

Вы можете написать хранимую процедуру в SQL, чтобы сделать это для вас, а затем добавить ее в свои объекты LINQ.

Stored Proc примет ваши 3 параметра и затем выполнит запрос.

Для обработки случаев, когда значением может быть пустая строка (пользователь ничего не печатал), вы можете добавить предложение или, чтобы отфильтровать его.

SELECT Name, Surname, Occupation FROM tblWhatever
WHERE (@Name = '' OR @Name = Name)
AND (@Surname = '' OR @Surname = Surname)
AND (@Occupation = '' OR @Occupation = Occupation)

Я давно не писал SQL, поэтому он может не запуститься сразу. Надеюсь, вы поняли идею.

0 голосов
/ 04 декабря 2009

Вы можете создать таблицу поиска в вашей базе данных, которая будет заполняться триггером на объектах обычных сущностей. Таблица поиска может быть: EntityTableName, EntityTableID, EntityDescriptionString. Строка описания сущности будет сгенерирована при вставке сущности путем объединения соответствующих полей для поиска. Тогда вы будете использовать стандартный запрос LIKE в SQL или .Contains в Linq2SQL.

Поиск труден!

...