2

有没有办法简化它并让它更快?在 SQL 中,我在同一个查询中使用 count(*) 和 count(distinct),这给了我更快的结果

谢谢一堆。

int numberOfUsers = (from u in db.UseLogs
                     where u.DocID == docID 
                        && u.LogDate >= fromDate 
                        && u.LogDate <= to
                     select u.UserID).Distinct().Count();

int numberOfVisits = (from u in db.UseLogs
                      where u.DocID == docID 
                         && u.LogDate >= fromDate 
                         && u.LogDate <= to
                      select u).Count();

结论

LINQ 中没有 Count(Distinct)。并非每条 SQL 语句都可以转换为 LINQ。

谢谢你们的帮助!

4

2 回答 2

0

这是你要找的吗?

from u in db.UseLogs
where u.DocId == docId && u.LogDate >= fromDate && u.LogDate <= to
group u by true into g
select new
{
    Count = g.Count(),
    DistinctUserCount = g.Select(x => x.UserId).Distinct().Count()
}

您将需要检查它是否实际上比运行两个查询更快,或者性能增益是否值得失去可读性。

于 2012-11-14T13:57:09.573 回答
0

不完全是您想要实现的目标,但可能同样快:

var query = 
    from u in db.UseLogs
    where u.DocId == docId && u.LogDate >= fromDate && u.LogDate <= to
    group u by u.UserID into g
    select new
    {
        Visits = g.Count()
    };

    int numberOfUsers  = query.Count();
    int numberOfVisits = query.Sum(q=>q.Visits);

它只执行一次 SQL 并在内存中进行求和。

于 2012-11-14T14:36:24.417 回答