我有一个ActivityLog表,每个网页应用中的每个页面都有一行。该表具有以下相关字段:PageTitle,UserName,ActivityDate。我想添加一个带有GridView的Usage History页面,其中包含以下列:Page Title,#Hits和#Unique Users。因此,对于应用中的每个页面,我们都会显示点击总数以及点击该页面的唯一用户数量。如何在linq中使用分组,统一和统计?
我曾尝试以下LINQ,其中,从我能在我的搜索收集,应该工作:
var ual = (from activityLog in linqMetaData.UserActivityLog
group activityLog by activityLog.PageTitle into pageGroup
select new PageUsageStatistics()
{
PageTitle = pageGroup.Key,
NumHits = pageGroup.Count(),
NumUniqueUsers = pageGroup.Select(x => x.UserName).Distinct().Count()
});
的NumHits回来与预期数量;但是,NumUniqueUsers会返回具有匹配的唯一总用户数量,而不是每个页面的数量。因此,如果我有3个用户,每个用户在他们自己的不同页面上有1次访问(User1访问Page1,User2访问Page2,User3访问Page3),但我的表中的所有三行都显示3个NumUniqueUsers列,即使他们应该显示1.
有什么建议吗?
谢谢, 克里斯
编辑 - 添加生成的SQL:
SELECT [LPA_L1].[PageName],
[LPA_L1].[NumHits],
[LPA_L1].[NumUniqueUsers]
FROM
(SELECT [LPA_L2].[PageTitle] AS [PageName],
[LPA_L2].[LPAV_] AS [NumHits],
(SELECT COUNT(*) AS [LPAV_]
FROM
(SELECT DISTINCT [LPA_L2].[UserPrincipleName]
FROM [USIC].[dbo].[UserActivityLog] [LPA_L2]
) [LPA_L3]) AS [NumUniqueUsers]
FROM
(SELECT [LPLA_1].[PageTitle],
COUNT(*) AS [LPAV_]
FROM [USIC].[dbo].[UserActivityLog] [LPLA_1]
GROUP BY [LPLA_1].[PageTitle]
) [LPA_L2]
) [LPA_L1]
ORDER BY [LPA_L1].[PageName] ASC
老实说,我没有看到任何错误的代码。 –
哈哈,我也不会!我无法弄清楚为什么它显示3而不是1为独特的用户! – RebelScum
你能告诉我们生成的sql吗? –