Как использовать разные с group by в Linq для SQL

Я пытаюсь преобразовать следующий SQL в SQL Linq 2:

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()
    };

Когда я запускаю код, я продолжаю получать неверный идентификатор группы. Любые идеи? Кажется, что всё портит…

Вот сгенерированный 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]
11
задан James Curran 26 August 2010 в 20:48
поделиться

3 ответа

Попробуйте использовать предложение where для устранения ложных идентификаторов после соединения...

var q = from i in ProcessRoundIssueInstance
    where i.GroupID != ""
    group i by i.GroupID into g
    select new
    {
        Key = g.Key,
        Count = g.Select(x => x.UserID).Distinct().Count()
    };
0
ответ дан 3 December 2019 в 11:36
поделиться

Согласно этому сообщению, ваш код выглядит правильно:

LINQ to SQL с использованием GROUP BY и COUNT(DISTINCT)

Вы пробовали проверить сгенерированный SQL?

0
ответ дан 3 December 2019 в 11:36
поделиться

Похоже, что в сгенерированном SQL содержится целая куча ошибок, связанных с тем, что GroupID равен NULL. Если это возможно? ЕСЛИ нет, попробуйте изменить определение, чтобы оно НЕ было NULL.

0
ответ дан 3 December 2019 в 11:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: