【发布时间】:2017-09-21 04:55:51
【问题描述】:
我有一个非常奇怪的问题,我的 LINQ 查询执行速度如此之慢。代码如下:
var user = ctx.Users.FirstOrDefault(x => x.Username== username);
ViewBag.Items = user.Items.GroupBy(x => x.ItemId).Select(pr => new SalesViewModel
{
ImageURL = pr.Select(x=>x.ImageURL).FirstOrDefault(),
Title= pr.Select(x=>x.Title).FirstOrDefault(),
Sales = pr.Select(x=>x.Transactions.Sum(y=>y.QuantitySold)).FirstOrDefault()
})
.OrderByDescending(x=>x.Sales)
.ToList();
因此,用户对象包含一个 ICollection 集合 Items,其中包含 1300 个项目。这些项目中的每一个都包含另一个称为“事务”集合的 ICollection...
我注意到每个都最多有 20-25 个事务,所以项目内的集合并没有那么大......
我在这里做错了什么,为什么 LINQ 需要 30-40 秒来处理此代码?
有什么办法可以改善吗?
【问题讨论】:
-
如果
ItemId是Items表的PK,则不需要分组 -
@octavioccl 不幸的是 :( ...这是一个单独的属性
-
我从
ctx猜测这是实体的 linq?如果是这样,请使用分析器查看正在生成的 SQL 语句。 -
@stuartd 是的,是的,好的,我会看看那个 thx :)
-
听起来像是懒加载导致的N+1查询问题。
标签: c# asp.net asp.net-mvc linq c#-4.0