2015-10-19 35 views
3

我有兩個表使用LINQ連接查詢:防止重複總和LINQ組,並加入

例如:

MandaysReal 
date  | mandays 
---------------------- 
2015/10/15 | 5 
2015/10/15 | 7 

EstateAttendance 
date  | mandays 
---------------------- 
2015/10/15 | 2 

然後我用這個查詢和團體加入日期:

var data = from m in db.ManDaysReals 

     join a in db.EstateAttendances on m.Date equals a.Date 
     group new { M = m, A = a } by m.Date into g 
     where g.FirstOrDefault().A.Date >= startDate && g.FirstOrDefault().A.Date <= endDate 
     && g.FirstOrDefault().A.Block.Section.Id == SectionId 

     select new CompareMandaysViewModel 
     { 
      Date = g.FirstOrDefault().A.Date, 
      HKMandays = g.Sum(x => x.M.Mandays), 
      HKAttendance = g.Sum(x => (decimal)x.A.mandays), 
     }; 

結果顯示如下:

CompareMandaysViewModel 
date  | HKMandays | HKAttendance 
2015/10/15 | 12  |  4 <-- why the result is 4 ? 

HKAttendance的價值是重複的,任何人都可以幫助我?

謝謝

+0

應該是什麼'正確的值HKAttendance'而不是4? (這是2?這個計算的邏輯是什麼) – Fabjan

+0

該值應該爲2,因爲EstateAttendance中只有一個數據 – Mamen

+1

當您在LINQ中使用「join」關鍵字時,您就有笛卡爾積。這意味着連接會爲您提供2條記錄,其中Mandays = 2導致SUm爲4. –

回答

0

步驟:
1組分別記錄每個表到列表
2.加入他們的行列後
參見下面的例子

 var xp = (from p in db.ManDaysReals 
        group p by p.Date into g 
        select new 
        { 
         Date = g.Key, 
         ManDays = g.Sum(p => p.ManDays) 
        }).ToList(); 

     var xa = (from p in db.EstateAttendances 
        group p by p.Date into g 
        select new 
        { 
         Date = g.Key, 
         ManDays = g.Sum(p => p.ManDays) 
        }).ToList(); 

     var xt = from p in xp 
        join a in xa on p.Date equals a.Date 
        select new CompareMandaysViewModel 
        { 
         Date = p.Date, 
         HKMandays = p.ManDays, 
         HKAttendance = a.ManDays 
        };