如何在Linq中使用group by和count

时间:2010-04-04 19:24:08

标签: c# 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))

非常感谢任何有关如何操作的建议。

2 个答案:

答案 0 :(得分:3)

var groups =来自ProjectAssociation中的pa        让teamIds = User.Where(u => u.UserID == 4)。选择(u => u.TeamID)        其中teamIds.Contains(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)

答案 1 :(得分:2)

有一个工具(便宜)会为你转换这样的查询。它叫做Linqer。我拥有一个副本,并发现它能够将事件转换为最复杂的查询。网址为http://www.sqltolinq.com/

它不是免费的,但它相当便宜并且有30天的试用期。

相关问题