【发布时间】:2015-10-19 09:25:02
【问题描述】:
我有两个带有 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 的值是重复的,谁能帮帮我?
谢谢你
【问题讨论】:
-
HKAttendance而不是 4 的正确值应该是多少? (是2吗?这个计算的逻辑是什么) -
该值应为 2,因为 EstateAttendance 中只有一个数据
-
当您在 LINQ 中使用“join”关键字时,您有笛卡尔积。这意味着联接为您提供了 2 条记录,Mandays=2 导致 SUm 为 4。
-
我同意@TechieBee。如果您对长 LINQ 请求有任何问题,可以将其拆分为多个请求并检查中间结果
-
那我该怎么办?有没有过滤器来检查它是否有超过 1 条记录?