在以下情况下我遇到速度问题:
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 ......
任何暗示欢迎......
答案 0 :(得分:2)
要确保您的查询仅执行一次且mainQuery
为本地查询,请将您的第一个查询更改为:
dim mainQuery = (from c in competResults
where competID = xxx
select c.resultID, c.resultPosition, c.result).ToList()