私はこれに困惑しています。
2つを1つにマージしようとしていDataTable
ます。できればlinq
このタスクを実行するために使用しますが、問題は、結合の条件を動的に追加する必要があることです。各テーブルのデータは、ストアドプロシージャへの2つの異なる呼び出しから取得され、使用される呼び出しは切り替えることができます。そのため、結果は列の数と使用可能な主キーが異なる可能性があります。
目標は、最初の結果セットの通常の文字列を、Unicodeを含むことができる2番目のデータベースに置き換えることです(ただし、主キーの特定の組み合わせの値が含まれている場合のみ)。
私のlinqクエリは次のようになります。
var joined = (from DataRow reg in dt1.Rows
join DataRow uni in dt2.Rows
on new { prim1 = reg.ItemArray[0], prim2 = reg.ItemArray[1] }
equals new { prim1 = uni.ItemArray[0], prim2 = uni.ItemArray[1] }
select new
{
prim1 = reg.ItemArray[0],
prim2 = reg.ItemArray[1],
value1 = reg.ItemArray[4],
value2 = uni.ItemArray[3] ?? reg.ItemArray[3]
}
);
これは私が望むものには完全に機能しますが、私が言ったように、各テーブルのどの列が主キーであるかを定義できる必要があるので、これは次のとおりです。
join DataRow uni in dt2.Rows
on new { prim1 = reg.ItemArray[0], prim2 = reg.ItemArray[1] }
equals new { prim1 = uni.ItemArray[0], prim2 = uni.ItemArray[1] }
DataRelation
テーブル間に作成する、またはlinq
主キーの動的な追加を実行する前などに置き換える必要があります。
また*
、最初の結果セットの列数がわからないため、各列を指定するのではなく、SQLのようなものを選択する必要があります。
また、主キーを追加してマージを実行してテーブルを結合しようとしましたが、dt2のどの列を選択してdt1のどの列を上書きするのですか?
DataTable join = new DataTable("joined");
join = dt1.Copy();
join.Merge(dt2, false, MissingSchemaAction.Add);
join.AcceptChanges();
VS2012を使用しています。