Linq on Linq没有数据库往返:速度问题

时间:2011-03-14 15:29:31

标签: linq subquery

在以下情况下我遇到速度问题:

SQL Server数据库托管在共享托管环境中,可通过DSL 2MBytes line

访问

有一张比赛结果表,每场比赛约有32排。

当我在datagridview中显示给定竞争的结果行时,我使用LINQ生成dgv数据源,然后我添加一个额外的计算列。

为什么然后添加一列? ** 因为Row1.extraColumn的值取决于Row1.Result与Row2.result相比的值 **

我写道:

dim mainQuery = from c in competResults 
                where competID = xxx 
                select c.resultID,  c.resultPosition, c.result

dataGridView1.datasource = mainQuery.ToList

'Prepare and add Exrta Column

dataGridView1.ADD额外列

请记住,dgv只有32行... ...

使用LINQ我有一个这样的子查询:

dim rowA = from q in mainQuery where rowNumber = xxx select q
dim rowB = from q in mainQuery where rowNumber = yyy select q

执行计算并在dgv中写入结果,如:

for each R in dgv.rows
  if R.cells("rowNumber").value = rowA.RowNumber then R.cells("ExtraColumn)).value = some result
  if R.cells("rowNumber").value = rowB.Rownumber then R.cells("ExtraColumn)).value = some result
next

这需要30秒到1分钟

我认为 LINQ在查询结果已被搜索的查询时不会返回查询数据库(当我执行dataGridView1.datasource = CResults.ToList时)。

当然,我可以完成迭代DGV行的工作,但我更喜欢使用LINQ ......

任何暗示欢迎......

1 个答案:

答案 0 :(得分:2)

要确保您的查询仅执行一次且mainQuery为本地查询,请将您的第一个查询更改为:

dim mainQuery = (from c in competResults 
                 where competID = xxx 
                 select c.resultID,  c.resultPosition, c.result).ToList()