Linq查询和集合修改

时间:2018-10-08 12:10:11

标签: c# vb.net linq collections

我有一个linq查询,如下所示:

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

“ tbl”是一个数据表,它具有大量的行,并且一直在更新(添加行,删除行和修改字段)。

我遇到了“收藏夹被修改”的错误,并且无法运行零件(.ToList)

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

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

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

任何想法

1 个答案:

答案 0 :(得分:0)

我通过以下方法解决了该问题:

因为我的数据表是一个多线程数据表,所以我在BackgroundWorkers中编写了所有编辑代码。因此,我要做的就是向我的应用程序中添加一个ManualResetEvent,并且在所有这些BackgroundWorkers的所有过程中,我在编辑代码之前添加了以下代码:

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

当我需要获取数据表的副本时,请执行以下操作:

ManualResetEvent.Reset()
Thread.Sleep(300)

然后我随意访问dataTable并将其复制到'm'。

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

此后,我通过调用以下命令恢复了backgroundWorker:

ManualResetEvent.Set()

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