Linq внешнее объединение с группировкой в ​​подзапросе - PullRequest
0 голосов
/ 30 октября 2010

Мне нужно преобразовать следующий коррелированный подзапрос в Linq в Sql.Я могу достичь левой части внешнего соединения.Однако при группировке в подзапросе я получаю неверные результаты.

SELECT 
  ae.Id,ae.Title
,(select COUNT(*) from [dbo].[AssociationEventRSVP]  where RSVPStatus='Y'
 group by  AssociationEventId, RSVPStatus having RSVPStatus='Y'
 and AssociationEventId=ar.AssociationEventId) as CountYes
,(select COUNT(*) from [dbo].[AssociationEventRSVP]  
 group by  AssociationEventId, RSVPStatus having RSVPStatus='N'
 and AssociationEventId=ar.AssociationEventId) as CountNo 
  FROM [dbo].[AssociationEvents] as ae
  left outer join AssociationEventRSVP as ar
  on ae.Id=ar.AssociationEventId

Заранее благодарен за помощь.

Тушар М.

1 Ответ

1 голос
/ 30 октября 2010

Я бы сначала реорганизовал ваш запрос на это:

SELECT 
ae.Id,
ae.Title,
(select COUNT(*) FROM [dbo].[AssociationEventRSVP] WHERE RSVPStatus='Y' AND AssociationEventId=ae.Id) AS CountYes,
(select COUNT(*) FROM [dbo].[AssociationEventRSVP] WHERE RSVPStatus='N' AND AssociationEventId=ae.Id) AS CountNo 
FROM [dbo].[AssociationEvents] as ae

А вот простое (не обязательно эффективное) преобразование LINQ в SQL:

var results = from ae in context.AssociationEvents
              select new
              {
                  ae.Id,
                  ae.Title,
                  CountYes = context.AssociationEventRSVP.Where(aer => aer.RSVPStatus == "Y" && aer.AssociationEventId == ae.Id).Count(),
                  CountNo  = context.AssociationEventRSVP.Where(aer => aer.RSVPStatus == "N" && aer.AssociationEventId == ae.Id).Count()
              };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...