有没有办法简化这个并让它变得更快? 在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。
感谢帮助人员!
答案 0 :(得分: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()
}
您需要检查它是否实际上比运行两个查询更快,或者性能增益值得失去可读性。
答案 1 :(得分: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并在内存中执行SUM。