2017-04-28 10 views
0

私は2つのテーブルに加わるので、結合レコードのフラットコレクションを返す必要があります。ここで最初のコードは次のとおり
LINQの結合結果を効率的にフラット化

var v = (from t1 in Table1 
     join t2 in Table2 on t1.Col1 equals t2.Col1 
     select new { 
      t1, 
      t2 
     }).ToList(); 

結果は、行当たり2つのDataRow要素の集合であり、平坦ではありません。 これを効率的に平坦化したいのでをDataGridViewとして使用できます。私は各要素の各特性をリストアップすることはできません。

答えて

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; 
関連する問題