gpt4 book ai didi

c# - 我如何在 linq 中使用分组、不同和一起计数?

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:10 26 4
gpt4 key购买 nike

我有一个 ActivityLog 表,其中一行对应网络应用程序中每个页面上的每次点击。该表具有以下相关字段:PageTitle、UserName、ActivityDate。我想添加一个带有 GridView 的使用历史页面,该页面具有以下列:页面标题、# Hits、# Unique Users。因此,对于应用程序中的每个页面,我们将显示点击总数以及点击该页面的唯一用户数。

我已经尝试了以下 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 次点击(用户 1 命中页面 1,用户 2 命中页面 2,用户 3 命中页面 3),我表中的所有三行都显示 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 个用户,每个用户在 3 个页面中各有 1 个点击”

我将其解释为您的日志如下所示:

  • 用户 1 - 页面 1
  • 用户 1 - 页面 2
  • 用户 1 - 页面 3
  • 用户 2 - 页面 1
  • 用户 2 - 页面 2
  • 用户 2 - 页面 3
  • 用户 3 - 页面 1
  • 用户 3 - 页面 2
  • 用户 3 - 页面 3

在这种情况下,每个页面确实有 3 个唯一用户,因此您的代码是正确的

关于c# - 我如何在 linq 中使用分组、不同和一起计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com