【发布时间】:2023-03-26 15:09:02
【问题描述】:
在我的查询中,我尝试每次只获取 500 条市场记录 (PageSize=500)。所以接下来理想情况下,我应该只为这 500 个市场记录获取子系统。这就是为什么在“子系统”查询中我尝试加入过滤后的市场记录列表。这个查询非常慢。然后我尝试在 'subsytems1' 查询中直接加入 dbContext.tblfitems 。此查询比第一个查询快。但我加入了 fitems (marketrecords) 中的所有记录。理想情况下,第二个应该很慢,因为 join 有数千条记录,但在早期的情况下,它只有 500 条记录。我只是不想加入所有记录,而是只想加入 500 条记录。我该如何进行?
List<MarketRecord> maketRecords = _dbContext.tblfitems.Where(x => x.MarketId == marketId)
.OrderBy(x => x.RecordId)
.Skip((pageIndex - 1) * PageSize)
.Take(PageSize)
.ToList();
List<FSubsystem> subsytems = (from t1 in _dbContext.tblfsubsystems
join t2 in maketRecords on t1.RecordId equals t2.RecordId
where t2.MarketId == marketId
select t1)
.Distinct().OrderBy(x => x.RecordId).ThenBy(y => y.FSubsystemId).ToList();
List<FSubsystem> subsytems1 = (from t1 in _dbContext.tblfsubsystems
join t2 in _dbContext.tblfitems on t1.RecordId equals t2.RecordId
where t2.MarketId == marketId
select t1)
.Distinct().OrderBy(x => x.RecordId).ThenBy(y => y.FSubsystemId).ToList();
【问题讨论】:
-
加入内存列表会使查询将整个 tblfsubsystems 表拖入内存。从第一个查询中删除
ToList。 -
@DavidG 谢谢大卫。现在工作正常
标签: c# performance entity-framework linq linq-to-sql