Thursday, August 26, 2010

How to use distinct with group by in Linq to SQL

Programmer Question

I'm trying to convert the following sql to Linq 2 SQL:



select groupId, count(distinct(userId)) from processroundissueinstance 
group by groupId


Here is my code:



var q = from i in ProcessRoundIssueInstance
group i by i.GroupID into g
select new
{
Key = g.Key,
Count = g.Select(x => x.UserID).Distinct().Count()
};


When I run the code, I keep getting Invalid GroupID.
Any ideas? Seems the distinct is screwing things up..



Here is the generated sql:



SELECT [t1].[GroupID] AS [Key], (
SELECT COUNT(*)
FROM (
SELECT DISTINCT [t2].[UserID]
FROM [ProcessRoundIssueInstance] AS [t2]
WHERE (([t1].[GroupID] IS NULL) AND ([t2].[GroupID] IS NULL))
OR (([t1].[GroupID] IS NOT NULL)
AND ([t2].[GroupID] IS NOT NULL)
AND ([t1].[GroupID] = [t2].[GroupID]))
) AS [t3]
) AS [Count]
FROM (
SELECT [t0].[GroupID]
FROM [ProcessRoundIssueInstance] AS [t0]
GROUP BY [t0].[GroupID]
) AS [t1]


Find the answer here

No comments:

Post a Comment

LinkWithin

Related Posts with Thumbnails