Я испытываю затруднения при попытке преобразовать следующий запрос от 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))
Любой совет относительно того, как сделать так, очень ценился бы.
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)
Существует инструмент (дешевый), который конвертирует подобные запросы за вас. Это называется Linqer. У меня есть копия, и я обнаружил, что она может преобразовывать события в самые сложные запросы. URL-адрес http://www.sqltolinq.com/
Это платно, но довольно недорого и имеет 30-дневную пробную версию.