У меня есть мой linq, как показано ниже:
from ucd in UserCategoryDetails
join uc in UserCategories on ucd.UserCategoryDetailsID equals
uc.UserCategoryDetailsID into ucj from uc in ucj.DefaultIfEmpty()
join uct in UserCategoryTypes on ucd.UserCategoryTypeID equals
uct.UserCategoryTypeID
join cc in UserCategoryColours on ucd.UserCategoryColourID equals
cc.UserCategoryColourID
where
ucd.UserCategoryTypeID == 2 &&
ucd.UserID == 1
group ucd by new {
ucd.UserCategoryDetailsID,
ucd.CategoryName,
cc.UserCategoryColourID,
cc.ImageSrcLarge,
cc.ImageSrcSmall
} into g
select new {
UserCategoryDetailsID = g.Key.UserCategoryDetailsID,
CategoryName = g.Key.CategoryName,
CategoryColourID = g.Key.UserCategoryColourID,
ImageSrcLarge = g.Key.ImageSrcLarge,
ImageSrcSmall = g.Key.ImageSrcSmall,
CategoryCount = g.Count()
}
Проблема в том, что sql, генерируемый Count()
, равен COUNT(*)
, что приводит к путанице в результатах, так как возвращает 1, когда в UserCategories нет строк.
Может кто-нибудь показать мне, как сгенерировать эквивалент LINQ COUNT(uc.ProjectID)
, пожалуйста? В основном следующий оператор SQL, но в linq:
SELECT
[t0].[UserCategoryDetailsID], [t0].[CategoryName],
[t3].[UserCategoryColourID], [t3].[ImageSrcLarge],
[t3].[ImageSrcSmall], COUNT([t1].ProjectID) AS [CategoryCount]
FROM
[UserCategoryDetails] AS [t0]
LEFT OUTER JOIN [UserCategory] AS [t1] ON
[t0].[UserCategoryDetailsID]) = [t1].[UserCategoryDetailsID]
INNER JOIN [UserCategoryType] AS [t2] ON
[t0].[UserCategoryTypeID] = [t2].[UserCategoryTypeID]
INNER JOIN [UserCategoryColour] AS [t3] ON
[t0].[UserCategoryColourID] = [t3].[UserCategoryColourID]
WHERE
([t0].[UserCategoryTypeID] = 2) AND ([t0].[UserID] = 1)
GROUP BY
[t0].[UserCategoryDetailsID], [t0].[CategoryName],
[t3].[UserCategoryColourID], [t3].[ImageSrcLarge],
[t3].[ImageSrcSmall]