通过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
。数据表dtSchema
由GetOleDbSchemaTable()
填充。每行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拷贝问题:该行已经属于另一个表的解决方法