[英]Linq to Entities : Count is very slow
我需要在查询中使用parent和parent.child.count()....当我这样做时需要20秒....它不是一个庞大的数据库...任何优化的想法......
var plist = context.persons
.Select(p => new
{
p.fullName,
c.personID,
p.Status,
p.Birthdate,
p.Accounts.Count
}).ToList();
这篇文章是关于在你真正想要使用any()时使用count()的好文章
你需要使用.count还是可以使用.any?
由于这是实体框架,请打开sql profiler并查看正在向数据库发送的SQL查询。 听起来您可能会看到发送单个查询以获取组标识符,然后另一组查询(每个组一个)可能正在获取计数。 如果发生这种情况,您必须发布linq查询给某人以解决问题。
根据您发送的代码,看起来事情应该花费那么长时间。 我有一些建议:
Count()
花费的时间多得多。
.ToList()
之前使用.ToList()
.Take(int)
方法,以获得所需数量的条目。 如果您可以描述如何使用此数据,或提供SQL执行的屏幕截图,我们可以提供更多反馈。
我有一个类似的问题,我尝试了这些并且更好地解决了:
child.count(x => x.paretnID == inputParentID)child.where(x => x.parentID == inputParentID)
我的原始代码在每次迭代时花了大约15-20秒: return(isEdit)? db.ChasisBuys.Single(x => x.ChasisBuyID == long.Parse(Request.QueryString [“chbid”]))。Chasises.Count(y => y.Bikes.Count> 0 && y.ColorID == buyItems [(int)index] .ColorID && y.ChasisTypeID == buyItems [(int)index] .ChasisTypeID).ToString():“ - ”;
运行良好的新代码是:
**return (isEdit) ? db.Chasises.Where(x => x.ChasisBuyID == long.Parse(Request.QueryString["chbid"])).Count(y => y.Bikes.Count > 0 && y.ColorID == buyItems[(int)index].ColorID && y.ChasisTypeID == buyItems[(int)index].ChasisTypeID).ToString() : "-";**
数据库在chasises中有大约1000条记录,在chasisBuys中大约有5条记录,在自行车中大约有20条。 我的观点是Linq to SQL查询不会在逻辑语句中进行预先评估,例如,如果你写“return a && b && c;” 如果语句a是false,则其他语句不会被评估,我在linq中期待这样的事情,但事实并非如此。
我使用GroupBy方法解决了类似的问题。
IEnumerable> accounts = Accounts.GroupBy(x => x.personID); accounts.Count()将返回属于该人的帐户数。 accounts.Key将返回组的personID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.