防止linq组中的重复总和并加入

时间:2015-10-19 09:25:03

标签: c# 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的价值是重复的,任何人都可以帮助我?

谢谢

1 个答案:

答案 0 :(得分: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
                  };