Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询太慢,等效SQL很好_C#_Sql_Linq_Time_Analysis - Fatal编程技术网

C# LINQ查询太慢,等效SQL很好

C# LINQ查询太慢,等效SQL很好,c#,sql,linq,time,analysis,C#,Sql,Linq,Time,Analysis,我正在尝试使用C和LINQ查询数据库中的日常活动用户。我有一个运行良好的SQL查询。它在u.UserId时,Count语句似乎需要花费很长时间,因为我认为它必须映射回UserId的列表。如何更有效地编写查询 感谢您的帮助。谢谢 我会做如下事情 var UserCount = Logins.Where(x => x.Date = DateTime.Today) .Select(x => x.UserId).Distinct().Count();

我正在尝试使用C和LINQ查询数据库中的日常活动用户。我有一个运行良好的SQL查询。它在<4秒内完成运行

我的表称为Logins,其属性为:DATETIMEDate、GUIDUserId等

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的列表。如何更有效地编写查询


感谢您的帮助。谢谢

我会做如下事情

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

当然,您可以用希望获得计数的任何一天来代替这一天。

您是否尝试过PLINQ:@Tim.Tang这听起来像是DB Linq查询L2SQL/L2EF,因此PLINQ不会有任何帮助。它们的作用并不完全相同,因为SQL中没有WHERE子句,因为分组速度很慢,您也无法获得当天的数据。我会以我的方式发布,你可以自由尝试。谢谢!这将转换为高效的SQL,我可以简单地通过迭代获得一个月内的所有天数。非常感谢!