我有一些从各种来源(SQL 和 MS Access)加载到内存中的数据表,每个数据集都有几列,每个数据集之间只有一部分列是相同的。我正在编写一些数据同步代码,我想比较这些数据表,但只能根据它们共有的列进行比较。如果我不得不这样做,我可能会使用很多循环来做到这一点,但我想更熟悉 LINQ 并拥有更简洁的代码。
到目前为止,我已经设法从每个数据表中获取列名列表,并使用 Intersect 来获取它们共同的列名列表,如下所示:
private string[] Common_ColumnNames {
get {
// get column names from source & destination data
string[] src_columnNames =
(from dc in _srcDataTable.Columns.Cast<DataColumn>()
select dc.ColumnName).ToArray();
string[] dest_columnNames =
(from dc in _destDataTable.Columns.Cast<DataColumn>()
select dc.ColumnName).ToArray();
// find the column names common between the two data sets
// - these are the columns to be compared when synchronizing
return src_columnNames.Intersect( dest_columnNames ).ToArray();
}
}
现在我被困住了......我需要从每个 DataTable 中选择所有行,但只能选择那些常见的列。在我的脑海中,我看到这有几种不同的方式:
1)从数据表中选择所有行,并传入我想要的列列表字符串 [] 变量来告诉 LINQ 我想要哪些列
2)从数据表中选择所有行,并使用一些 lambda 函数(对我来说也是相当新的)从每一行中删除不需要的列,并输出一个包含一些删除列的新数据表。
任何有关如何实现这一目标的建议/建议将不胜感激。谢谢!