0

以下の内部結合を使用して 2 つのテーブル間のデータを取得していますが、すべてのデータが入力されていません。CCY1== CCY1 と PCODE == PCODE を使用して接続して Outer Join を実装しようとしましたが、うまくいきませんでした。

ここに画像の説明を入力

    var q = from g1 in TableCCY1.AsEnumerable()
            join g2 in TableCCY2.AsEnumerable()
            on g1.Field<string>("CCY1") equals g2.Field<string>("CCY1") 
            where  g1.Field<string>("PCODE") == g2.Field<string>("PCODE")
                   select new
                     {
                             g1currency = g1.Field<string>("CCY1"),
                             g2currency = g2.Field<string>("CCY1"),
                             g1code = g1.Field<string>("PCODE"),
                             g2code = g2.Field<string>("PCODE"),
                             g1Amt1 = g1.Field<string>("AMT1"),
                             g2Amt2 = g2.Field<string>("AMT2")
                     };

ご協力いただきありがとうございます。

4

2 に答える 2

2

左結合の場合、次のアプローチを使用できます: http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx

コードは次のようになります。

var q = from g1 in TableCCY1
            join g2 in TableCCY2 on g1.CCY1 equals g2.CCY1 && g1.PCODE equals g2.PCODE into TableCCY3
from g3 in TableCCY3.DefaultIfEmpty()
 select new
                     {
                             g1currency = g1.CCY1,
                             g2currency = (g3 == null ? String.Empty : g3.CCY1),
                             g1code = g1.PCODE,
                             g2code = (g3 == null ? String.Empty : g3.PCODE),
                             g1Amt1 = g1.AMT1,
                             g2Amt2 = (g3 == null ? 0 : g3.AMT2)
                     };
于 2013-10-31T20:57:48.863 に答える
1

2 つのテーブルを 1 つに結合/連結してから、それら 2 つの列をグループ化するだけのようです。2 つのテーブルを論理的に結合していません。これにより、実際にははるかに簡単になります。

var q = from row in TableCCY1.AsEnumerable().Concat(TableCCY2.AsEnumerable())
        group row by new
        {
            CCY1 = row.Field<string>("CCY1"),
            PCode = row.Field<string>("PCODE")
        } into matches
        select new
        {
            CCY1 = matches.Key.CCY1,
            PCODE = matches.Key.PCode,
            Sum = matches.Sum(match => match.Field<decimal?>("AMT2")),
        };
于 2013-10-31T20:58:46.817 に答える