3

我正在尝试使用 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 的列表。如何更有效地编写查询?

任何帮助表示赞赏。谢谢!

4

1 回答 1

1

我会做如下...

var UserCount = Logins.Where(x => x.Date = DateTime.Today)
                    .Select(x => x.UserId).Distinct().Count();

您当然可以用您想要计算的任何一天来代替这一天。

于 2013-07-13T08:24:37.227 回答