datatable select时内部索引已经毁损解决方法

把datatable中的内容复制一份(深拷贝),然后操作新复制出来的datatable即可修复此问题。具体操作如下:

报错代码:

var pingResultToReport = pingResults.Select("Ping32AvgCost <> -2 and  IsReport=false");//.ToList();//

修改后代码

ResultSets.PingTestResultDataTable tmp = new ResultSets.PingTestResultDataTable();
lock (pingResults)
 {
     foreach (var row in pingResults)
     {
         tmp.Rows.Add(row.ItemArray);
         //row.IsReport = true;
     }
     tmp.AcceptChanges();
 }
 //0为值,-1为超时,-2为没测,-3为测试异常。默认值为 - 2
 var pingResultToReport = tmp.Select("Ping32AvgCost <> -2 and  IsReport=false");//.ToList();//浅拷贝

注意: datatable是非线程安全的,多线程操作时需要加锁
同时,由于datatable是引入类型,在foreach时候改变datatable中的字段值,这种更改会直接传递到数据表内部
尽可能在任何时候调用AcceptChanges();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值