Запрос двух разных типов сущностей с помощью PredicateBuilder - PullRequest
0 голосов
/ 21 сентября 2009

Я отчаянно пытаюсь использовать LinqKits PredicateBuilder, чтобы позволить пользователю вводить поисковый запрос в текстовое поле и возвращать записи из двух таблиц / наборов сущностей базы данных, но я изо всех сил пытаюсь добраться куда угодно. (Упрощенная) структура базы данных выглядит следующим образом:

Person                Alias
------                ------
                      A_ID
P_ID ---------------< P_ID
P_FIRST_NAME          A_FIRST_NAME
P_SURNAME             A_SURNAME

Итак, у каждого человека может быть 0 или много псевдонимов. Я пытаюсь разрешить пользователю выполнять поиск по имени и извлекать строки из таблицы Person, где это имя совпадает с именем в таблице Person или Alias. Пока у меня есть:

        var peopleQuery = MainFrm.genesisContext.People.AsExpandable();
        var peoplePredicate = PredicateBuilder.True<Person>();

        var aliasQuery = MainFrm.genesisContext.Alias.AsExpandable();
        var aliasPredicate = PredicateBuilder.False<Alias>();

        if (!String.IsNullOrEmpty(txtFirstName.Text.Trim()))
        {
            peoplePredicate = peoplePredicate.And(p => p.P_FIRST_NAME == txtFirstName.Text);

            aliasPredicate = aliasPredicate.And(a => a.A_FIRST_NAME == txtFirstName.Text);

            peoplePredicate = peoplePredicate .Or(p => aliasPredicate);
        }

Это не работает, потому что я пытаюсь преобразовать людей в псевдонимы. По сути, я полностью застрял и не уверен, возможно ли вообще выполнить запрос Or для двух разных таблиц (?)

1 Ответ

1 голос
/ 21 сентября 2009

Я могу придумать несколько возможных решений:

  1. Включите основное имя каждого человека в Псевдоним таблицы, и просто поиск по Таблица псевдонимов или
  2. СОЮЗИТЕ две таблицы вместе перед поиск или
  3. Запустите запрос Linq, который внешне присоединяет таблицу Alias ​​к таблице Person, и использовать результат в вашем поиске, включая ваше условие ИЛИ
...