首页 > 解决方案 > Linq 查询和集合修改

问题描述

我有一个如下的 linq 查询:

dim m As iEnumerable(Of DataRow)= (From b In tbl Select b).ToList.AsEnumerable

其中 'tbl' 是一个 DataTable,它有大量的行并且一直在更新(添加行、删除行和修改字段)。

我收到“集合已修改”错误,无法运行该部分 (.ToList)

'tbl' 总是被修改,我不想停止更新。

如何检索实例或至少如何访问只读查询?

我希望查询作为查询执行时的状态,并且我需要它而不需要更新。

任何想法

标签: c#vb.netlinqcollections

解决方案


我解决了它如下:

因为我的DataTable是一个多线程的DataTable,所以我把所有的编辑代码都写在BackgroundWorkers中。因此,我所做的只是将一个 ManualResetEvent 添加到我的应用程序中,并且在所有这些 BackgroundWorkers 的所有程序中,我在编辑代码之前添加了以下代码:

ManualResetEvent.WaitOne()
... Editing DataTable here.

当我需要获取我的 DataTable 的副本时,我会执行以下操作:

ManualResetEvent.Reset()
Thread.Sleep(300)

然后我自由地访问了dataTable并按照我的意愿将它复制到'm'。

dim m As iEnumerable(Of DataRow)= (From b In tbl Select b).ToList.AsEnumerable

在此之后,我通过调用恢复了 backgroundWorker:

ManualResetEvent.Set()

我不知道这是否是最好的解决方案,但至少它解决了我的大部分问题。


推荐阅读