我正在尝试使用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()
}
经过测试,当我必须选择(u => u.UserId)时,似乎Count语句需要永远,因为我认为它必须映射回UserId的列表。如何更有效地编写查询?
感谢任何帮助。谢谢!
答案 0 :(得分:1)
我会这样做......
var UserCount = Logins.Where(x => x.Date = DateTime.Today)
.Select(x => x.UserId).Distinct().Count();
你当然可以用你希望计算的那一天替换这一天。