2016-09-14 5 views
0

私は2つのテーブルdt1とdt2を持っています。
私はDT1内のデータを検索するが、いくつかの列に基づいてDT2には一致しない。(動的)LINQ:2つのデータテーブルを動的キーで結合する方法

私が把握方法は、2つのテーブルを結合し、その列がNULL値を持つものを見つける残されています。
しかし、問題はどのように動的列番号でそれらを結合できますか。
たとえば、最初はN列で結合したいが、dt2の列の1つが空またはnullの場合は、N-1列の残りの列と結合したい。例えば

DT1:

ColA, ColB, ColC, ColD 
1A 1B 1C 1D 
2A 2B 2C 2D 
3A 3B 3C 3D 
4A 4B 4C 4D 

DT2:

ColAA ColBB ColCC, ColE 
1A  1B  null 1E 
2A  2X  null 2E 
3A  3B  3C  3E 
null null 4C  4E 

dt1 left join dt2 by ColA=ColAA, ColB=ColBB and ColC=ColCC

それらのいずれかがnullの場合、残りの列に加わります。

期待される結果:

ColA, ColB, ColC, ColD, ColE 
1A 1B 1C 1D 1E 
2A 2B 2C 2D null 
3A 3B 3C 3D 3E 
4A 4B 4C 4D 4E 

コールにNULL値を持つデータは、私が欲しいものである(図2A、2B、2C、2D、ヌル)
今のみ固定列によってそれらを結合することができる、方法。上記のシナリオを達成できますか?

ありがとうございます。

+0

行1と行2のデータは同じです。しかし、なぜ期待される結果では、行1と行2が異なるのでしょうか? Row 2のColEがnullであるため? – Mark

+0

データがない場合は、それに参加できません。何らかの形の一貫性が必要です。それ以外の場合は、長期的には大きな問題を作成します。 –

+0

すべての行にColCC列がNULLの場合はどうなりますか?すべての行には、nullまたは値で埋められた同じ列があります。しかし、私はどの列が実行時までヌルになるのかわかりません。たとえば、ラウンド1では、ColCCはすべての行でnullになり、ラウンド2ではColAAとColBBがすべての行でNULLになることがあります。 –

答えて

1

https://msdn.microsoft.com/en-us/library/bb882533.aspxを参照してください。


それはあなたが望むように聞こえる:

  from d1 in dt1 
     from d2 in dt2 
     where (d1.ColA==d2.ColAA or d2.ColAA == null) and 
       (d1.ColB==d2.ColBB or d2.ColBB == null) and 
       (d1.ColC==d2.ColCC or d2.ColCC == null) 
     select new { ..... }; 

これは、あなたが例and (d1.ColA==d2.ColAA or d1.ColB==d2.ColBB or d1.ColC==d2.ColCC)ので、彼らは追加したいことがあり、正確にあなたがしたいクエリであれば、私はあなたの質問からわからないんだけどALL NULLにリンクできません

+0

私の理解でOPが必要なのは '(d1.ColA == d2.ColAAとd2.ColAA!= null)' 2つの列を結合すると、列の値には例のように 'null'広告が含まれていません –

+0

はい、これは私が必要なものです。 –

関連する問題