c# - Linq 查询和集合修改
问题描述
我有一个如下的 linq 查询:
dim m As iEnumerable(Of DataRow)= (From b In tbl Select b).ToList.AsEnumerable
其中 'tbl' 是一个 DataTable,它有大量的行并且一直在更新(添加行、删除行和修改字段)。
我收到“集合已修改”错误,无法运行该部分 (.ToList)
'tbl' 总是被修改,我不想停止更新。
如何检索实例或至少如何访问只读查询?
我希望查询作为查询执行时的状态,并且我需要它而不需要更新。
任何想法
解决方案
我解决了它如下:
因为我的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()
我不知道这是否是最好的解决方案,但至少它解决了我的大部分问题。
推荐阅读
- apache-kafka - 用户提供的 Kafka 连接器在哪里?
- javascript - 粘性导航栏的问题
- mongodb - 在 MongoDB 中的数组内的所有对象上添加键值
- javascript - GoJS 嵌套形状定位
- html - html代码的chrome中找不到文件错误
- javascript - 使用 wkhtmltopdf 库打印时如何接收 DOM 元素的高度?
- flutter - 在颤动中处理@build方法中的变量是正确的方法吗?
- javascript - 如何使用一些自定义验证来验证反应输入字段
- python - 如何刻意营造腐败形象?
- flutter - 在 PaginatedDataTabble 上添加搜索功能