Я отчаянно пытаюсь использовать LinqKits PredicateBuilder, чтобы позволить пользователю вводить поисковый запрос в текстовое поле и возвращать записи из двух таблиц базы данных/сущностей, но я изо всех сил пытаюсь добраться где угодно. (Упрощенная) структура базы данных выглядит следующим образом:Запрос двух разных типов сущностей с использованием 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);
}
Это не работает, потому что я пытаюсь преобразовать из People в Alias. В принципе я полностью застрял и не уверен, что это вообще возможно сделать запрос или на два разных таблицах
Как бы я сделал внешнее соединение в linq? Я думал, что внешние соединения невозможны? – Calanus
Имитация внешнего соединения: http://www.hookedonlinq.com/OuterJoinSample.ashx –
Спасибо, В итоге я использовал оператор Linq Union для объединения двух наборов результатов ... – Calanus