我正在尝试使用 C# 和 LINQ 在数据库中查询每日活跃用户。我有一个运行良好的 SQL 查询。它在 < 4 秒内完成运行。
我的表名为 Logins,具有以下属性:(DATETIME)Date、(GUID)UserId 等
SELECT CAST([DATE] AS DATE) Date , COUNT (DISTINCT USERID) DailyActives
FROM Logins
GROUP BY CAST([DATE] AS DATE)
ORDER BY CAST([DATE] AS DATE)
其中计算了当天登录的不同用户。我的 LINQ 查询给出了正确的答案,但速度很慢(很多分钟)。在这里,我从特定月份中选择
from rows in Logins
where rows.Date.Month == 04 && rows.Date.Year == 2013
group rows by rows.Date.Day into MyGroup
orderby MyGroup.Key
select new
{
LoginDate = MyGroup.Key,
Count = MyGroup.Select(u => u.UserId).Distinct().Count()
}
经过测试,当我必须 Select(u=>u.UserId) 时,似乎 Count 语句需要永远,因为我认为它必须映射回 UserId 的列表。如何更有效地编写查询?
任何帮助表示赞赏。谢谢!