【发布时间】:2011-06-22 06:40:17
【问题描述】:
我有一个 Linq to SQL 查询,它简单地连接三个表,然后执行分组。这是查询:
(from s in mktActualSales
join p in sysPeriods on s.PeriodID equals p.PeriodID
join d in setupDesignations on s.PositionID equals d.DesignationID
group new { s, p } by new{d.Title,d.DesignationID} into temping
select
new
{
SPOPosition = temping.Key.Title,
SalesPeriods = temping.Select(x=>new {PeriodID = x.p.PeriodID, StartDate = x.p.StartDate, EndDate = x.p.EndDate, SaleTargetID = x.s.ActualSaleID, IsApproved = x.s.IsApproved}),
PositionID = temping.Key.DesignationID
}).Take(5)
当我在 LinqPad 中检查此查询生成(执行)的 SQL 时,有 6 个 SQL 语句;第一个执行连接和分组,其余查询相同,只是使用不同的参数一遍又一遍地调用相同的查询。显然参数是分组的Key中包含的值。
这让我相信,对于 130 个组的记录,Linq 将访问数据库 131 次。我怎样才能将这么多的点击量保存到数据库中?我应该在将数据加载到内存后(即在连接查询上调用 ToList 后)执行分组吗?
【问题讨论】:
标签: sql sql-server asp.net-mvc linq linq-to-sql