У меня есть форма, которая позволяет пользователю выполнять множество поисков. Таблицы, которые необходимо объединить, различаются в зависимости от введенных критериев поиска. (Мой пример ниже очень упрощен, потому что обе таблицы используют одни и те же вложенные таблицы для объединения, но реальная проблема не так проста.)
Я использовал технику, которую я называю LINQ Stacking, например:
IQueryable<LogENT> results = Context.AssignedLogsENT.Where(l => l.AgencyId);
if(txtFirstName.Text != null)
results = from r in results
join a in Context.LogAssignmentsENT on r.DisplayLogId equals a.LogId
join p in Context.PersonsENT on a.ObjectId equals p.DisplayPersonId
&& !a.Deleted &&
p.FirstName.StartsWith(Object.FirstName)
select r;
if(txtLastName.Text != null)
results = from r in results
join a in Context.LogAssignmentsENT on r.DisplayLogId equals a.LogId
join p in Context.PersonsENT on a.ObjectId equals p.DisplayPersonId
&& !a.Deleted &&
p.LastName.StartsWith(Object.LastName)
select r;
Итак, вы видите, если определенное текстовое поле установлено, я добавляю к запросу по мере необходимости. Это на самом деле работает нормально, за исключением того, что когда я использую SQL Profiler для просмотра сгенерированного запроса, он ВНУТРЕННИЙ, ЧТОБЫ присоединиться к таблицам каждый раз, когда я добавляю новый критерий.
т.е. Таблица LogAssignments включена 3, 4, 5 раз. Есть ли способ, которым я могу предотвратить присоединение к одной и той же таблице более одного раза?
Или есть ли лучший способ сделать это? Я посмотрел на Predicate Builder, однако он не позволяет объединять таблицы, что является требованием в моем случае.
Спасибо!