我在尝试将以下查询从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))
非常感谢任何有关如何操作的建议。
答案 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天的试用期。