LINQ 2 левых присоединяется - PullRequest
       3

LINQ 2 левых присоединяется

1 голос
/ 12 декабря 2011

Итак, я хотел сделать linq-запрос из моего левого соединения sql (см. Ниже).Я просто не знаю, как правильно расположить условие ".TournamentId = 1" в соединениях.В настоящее время при запуске этого в моей базе данных я получаю результаты, которые я хочу.это пара строк из таблицы типов с пустыми полями.

select typ.Id, stat.PromoterId, temp.PromoterId
from ReportTypes type
left join ReportTemplateStatus status on status.PromoterId = type.TypeId and status.TournamentId = 1
left join ReportTemplates temp on temp.ClientId = status.PromoterId and temp.TournamentId = 1

Promoter
 - promoterId
 - promoterName

Tournament
 - tournamentId
 - tournamentName

ReportType
 - TypeId

ReportTemplateStatus 
 - promoterId (this is the key)
 - tournamentId
 - typeId

ReportTemplates
 - promoterId
 - tournamentId

В настоящее время это то, что у меня есть:

var report  =  from type in context.ReportTypes 
                 join status in context.ReportTemplateStatus on type.TypeId equals status.TypeId
                 join temp in context.ReportTemplates  on status.promoterId equals temp.promoterId into iReports
                 from reports in iReports.Where (rep => rep.promoterId == _promoterId && rep.tournamentId == _tournamentId).DefaultIfEmpty()
select new { my fields});

, но это дает мне ноль.

есть идеи, как должен работать linq?может быть, разделить на «itables» (iReports) или что-то?

Ответы [ 2 ]

4 голосов
/ 12 декабря 2011

Это должно дать вам то, что вы ищете

var report  =  from type in context.ReportTypes 
               from status in context.ReportTemplateStatus.Where(x => type.TypeId == x.TypeId)        
                                                          .Where(x => x.TournamentId == 1)  
                                                          .DefaultIfEmpty()
               from reports in context.ReportTemplates.Where(x => status.promoterId == x.promoterId)
                                                      .Where(x => x.TournamentId == 1)
                                                      .DefaultIfEmpty()
               select new { my fields};
0 голосов
/ 21 апреля 2015

Вы можете использовать как это

  var query = from person in people
                    join pet in pets on person equals pet.Owner into gj
                    from subpet in gj.DefaultIfEmpty()
                    select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...