0

3 つのテーブルで左外部結合を実行しようとしています。1つの変数でそれを行う方法があることは知っていますが、それを理解することができませんでした. 代わりに、2 つの別個の左外部結合を実行してから、それらに対して左外部結合を実行しました。そのための私のコードは次のとおりです。

var outerJoin1 =    

    (from h in resultHours  
    join u in results on new {h.PhysicalUnitId, h.MonthNum} equals new {u.PhysicalUnitId, u.MonthNum} into outer
    from grouping in outer.DefaultIfEmpty() 
    select new {timeKey = h, Key = grouping});

var outerJoin2 =    

    (from h in resultHours
    join s in serviceHrsResults on new {h.PhysicalUnitId, h.MonthNum} equals new {s.PhysicalUnitId, s.MonthNum} into outer2
    from grouping in outer2.DefaultIfEmpty()
    select new {timeKey = h, Key = grouping});

var outerJoin = 

    (from a in outerJoin1
    join b in outerJoin2 on new {a.timeKey.PlantId, a.timeKey.MonthNum} equals new {b.timeKey.PlantId, b.timeKey.MonthNum} into outer
    from grouping in outer.DefaultIfEmpty()
    select new{timeKey = a, Key = grouping}).Distinct();

上記を1つの変数にまとめてみましたが、うまくいきません。これが私が試したことです:

var outerjoin =

    from h in resultHours
    join u in results on new {h.PhysicalUnitId, h.MonthNum} equals new {u.PhysicalUnitId, u.MonthNum} into outer
    from grouping in outer.DefaultIfEmpty()
    from hr in resultHours
    join s in serviceHrsResults on new {hr.PhysicalUnitId, hr.MonthNum} equals new {s.PhysicalUnitId, s.MonthNum} into outer2
    from grouping in outer2.DefaultIfEmpty()
    select new {timeKey = h && timeKey = hr, Key = grouping};

これに関する問題は、2 つのグループ化の競合です。選択の直前に単一のグループ化が必要だと確信していますが、「グループ化」を使用してouter.DefaultIfEmpty()とouter2.DefaultIfEmpty()の両方を含める方法を理解できません。

誰かが私を啓発してくれれば幸いです。

4

1 に答える 1

1

重複した範囲変数 ID を使用しています - 2x がありgroupingます。
- 結果セットに含めるのはどのグループ化ですか? - このラインは何を達成すると予想されますか? timeKey = h && timeKey = hr- 投影でそれらをどのように組み合わせますか?

以下のクエリを試してみますがselect、組み合わせたバージョンが意味をなさないため、その一部を変更しました。

データがないとこれをテストするのは簡単ではないので、それがうまくいくかどうか教えてください。新しいバージョンがうまくいっているかどうかはわかりません.

var outerjoin =
    from h in resultHours
    join u in results on new {h.PhysicalUnitId, h.MonthNum} equals new {u.PhysicalUnitId, u.MonthNum} into outer
    from grouping1 in outer.DefaultIfEmpty()
    //from hr in resultHours
    join s in serviceHrsResults on new {grouping1.PhysicalUnitId, grouping1.MonthNum} equals new {s.PhysicalUnitId, s.MonthNum} into outer2
    from grouping2 in outer2.DefaultIfEmpty()
    select new {timeKey = h, Key1 = grouping1, Key2 = grouping2};
于 2012-06-07T07:14:14.790 に答える