通过DataTable c#中的itemArray值查找DataRow

Posted

技术标签:

【中文标题】通过DataTable c#中的itemArray值查找DataRow【英文标题】:Find DataRow through itemArray value in DataTable c# 【发布时间】:2020-11-28 18:52:08 【问题描述】:

我想根据itemArray 值从DataTable 中获取datarow。数据表dtSchemaGetOleDbSchemaTable() 填充。每行ItemArray 都有 Excel 工作表名称。我正在使用 foreach 循环进行操作。可以用更好的方法来完成吗?

DataTable dtSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
foreach (DataTable item in set.Tables) // set is a DataSet
            
                int i = dtSchema.Columns["TABLE_NAME"].Ordinal;
                if (item.Rows.Count <= 0)
                
                    foreach (DataRow row in dtSchema.Rows)
                    
                        if (row.Field<string>(i) == item.ToString()) // Finding data row
                        
                            dtSchema.Rows.Remove(row);
                            break;
                        
                    
                
            

【问题讨论】:

您的代码是否按您预期的方式工作?您可能会做的一件事是,在对行进行 foreach 之前,获取“TABLE_NAME”列的列索引。然后您可以按序数而不是按名称访问数据 代码正在运行。现在我已经更新了查找列序号的代码。检查它@Flydog57 【参考方案1】:
 DataTable dtSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            foreach (DataTable item in set.Tables) // set is a DataSet
            
                if (item.Rows.Count <= 0)
                
                    var MatchedRows = from s in dtSchema.AsEnumerable()
                                      where s.Field<string>("TABLE_NAME") == item.ToString()
                                      select s;
                    foreach (var item in MatchedRows)
                    
                        dtSchema.Rows.Remove(item);
                        break;
                    
                    dtSchema.AcceptChanges();
                
            

【讨论】:

我尝试了这段代码并从 foreach 循环中删除了break。 MatchedRows 的 foreach 循环给出错误 Collection 已修改;枚举操作可能不会执行。当它第二次运行时 不要删除中断。这个 for 循环只会运行一次

以上是关于通过DataTable c#中的itemArray值查找DataRow的主要内容,如果未能解决你的问题,请参考以下文章

DataTable中的DataRow行数据复制给另一个DataTable表

C#两个DataTable拷贝问题:该行已经属于另一个表的解决方法

c#中两个列名相同的datatable,如何将他们数据加到一起?

DataTable中DataRow检查重复记录,去重复

处理dataTable的行和列数据

小知识点——DataTable把满足条件的一行放在第一行