我需要在查询中使用parent和parent.child.count(),但这样做需要20秒的时间...数据库不算很大...有什么优化的想法吗?
var plist = context.persons
.Select(p => new
{
p.fullName,
c.personID,
p.Status,
p.Birthdate,
p.Accounts.Count
}).ToList();
我需要在查询中使用parent和parent.child.count(),但这样做需要20秒的时间...数据库不算很大...有什么优化的想法吗?
var plist = context.persons
.Select(p => new
{
p.fullName,
c.personID,
p.Status,
p.Birthdate,
p.Accounts.Count
}).ToList();
这是一篇关于使用count()时实际上应该使用any()的优秀文章。
你需要使用.count还是可以使用.any?
由于这是实体框架,打开SQL Profiler并查看发送到数据库的SQL查询。听起来你可能会发现一个单独的查询被发送来获取组标识符,然后另一组查询(每个组一个)可能在获取计数。如果是这样的话,你需要发布LINQ查询以便其他人解决问题。
我使用GroupBy方法解决了一个类似的问题。
IEnumerable> accounts = Accounts.GroupBy(x => x.personID); accounts.Count()将返回属于该人的帐户数量。 accounts.Key将返回组的personID。
我曾经遇到一个类似的问题,我尝试了以下方法,效果更好:
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() : "-";**
数据库中有大约1000个底盘记录,大约有5个底盘购买记录和20个自行车记录。我的观点是,Linq to SQL查询不会像逻辑语句那样进行先前评估,例如如果您写“return a && b && c;”,如果语句a为false,则不评估其他语句,我期望Linq to SQL也能这样做,但实际并非如此。