【发布时间】:2011-05-23 08:12:09
【问题描述】:
我正在尝试将以下 sql 转换为 Linq 2 SQL:
select groupId, count(distinct(userId)) from processroundissueinstance
group by groupId
这是我的代码:
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()
};
当我运行代码时,我不断收到 Invalid GroupID。 有任何想法吗?似乎不同的是把事情搞砸了..
这里是生成的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]
【问题讨论】:
-
@Basiclife:FUBAR 是什么?在 SQL 中,NULL 不等于任何东西,包括 NULL。如果两者都是 NULL,
t1.GroupID = t2.GroupId仍然是错误的。这是关联两个 NULL 字段的唯一方法。
标签: c# .net linq linq-to-sql