我正在加入两个表,我需要返回连接记录的平面集合。这是初始代码:
var v = (from t1 in Table1
join t2 in Table2 on t1.Col1 equals t2.Col1
select new {
t1,
t2
}).ToList();
结果是每行有2个DataRow
元素的集合,并且不是平的。
我希望有效地将其展平,以便DataSource
用DataGridView
作为header('Content-Disposition: attachment; filename='.$Filename.'');
。我无法列出每个元素的每个属性。
答案 0 :(得分:0)
DataRow
并没有真正“有效地扁平”,因为它们与它们所属的DataTable
紧密耦合。 DataRow
没有包含它的列的概念,只有DataTable
知道这一点。这是将遗留DataSet / Table / Row代码与Linq混合可能成为问题的部分原因。对于OTOH来说,Linq本身并没有很好的方法在组合时使其变平。
因此,您必须创建一个DataTable,它可以保存两个源表中的所有列,然后复制值。
这个答案有进一步的解释和代码:Combine DataTables
var BothTables = Table1.Clone();
BothTables.Columns.AddRange(Table2.Columns.OfType<DataColumn>()
.Select(dc => new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping)).ToArray());
foreach (var vr in v)
BothTables.Rows.Add(vr.t1.ItemArray.Concat(vr.t2.ItemArray).ToArray());
var combinedv = BothTables.Rows;