LINQ查询太慢,等效SQL很好

时间:2013-07-12 14:33:19

标签: c# sql linq time analysis

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

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

我会这样做......

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

你当然可以用你希望计算的那一天替换这一天。