Как использовать группу и имеющий количество в Linq

Я испытываю затруднения при попытке преобразовать следующий запрос от SQL до Linq, в особенности с количеством наличия и группой частями запроса:

select ProjectID
from ProjectAssociation

where TeamID in ( select TeamID 
                  from [User]
                  where UserID in (4))
group by ProjectID
having COUNT(TeamID) = (select distinct COUNT(TeamID)
                        from [User]
                        where UserID in (4))

Любой совет относительно того, как сделать так, очень ценился бы.

5
задан Luke 4 April 2010 в 19:24
поделиться

2 ответа

var groups = from pa в ProjectAssociation let teamIds = User.Where (u => u.UserID == 4) .Select (u => u.TeamID) где teamIds. Содержит (pa.TeamID) group pa by pa.ProjectID;

var result = from g in groups
   let count = User.Where(u => u.UserID == 4).Select(u => u.TeamID).Distinct().Count()
   where g.Count() == count
   select g.Key;

Или, может быть, более оптимально:

var teamIds = User.Where(u => u.UserID == 4).Select(u => u.TeamID).AsEnumerable();
var groups = ProjectAssociation.Where(pa => teamIds.Contains(pa.TeamID)
   .GroupBy(pa => pa.ProjectID);
var result = from g in groups
       let count = teamIds.Distinct().Count()
       where g.Count() == count
       select g.Key;

Кстати, я думаю, что под

select distinct COUNT(TeamID)

вы имели в виду:

select COUNT(distinct TeamID)
3
ответ дан 14 December 2019 в 19:08
поделиться

Существует инструмент (дешевый), который конвертирует подобные запросы за вас. Это называется Linqer. У меня есть копия, и я обнаружил, что она может преобразовывать события в самые сложные запросы. URL-адрес http://www.sqltolinq.com/

Это платно, но довольно недорого и имеет 30-дневную пробную версию.

2
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: