【发布时间】:2019-12-13 09:55:02
【问题描述】:
我正在尝试像这样在 C# 中进行完全外部联接。
var LeftOuterJoin = from h in db.WorkingHoursPerProject
join t in db.Timesheets
on new { IDProject = h.IDProject, Username = h.Username, Year = h.Date.Year, Month = h.Date.Month} equals
new { IDProject = t.IDProject, Username = t.Username, Year = t.Date.Year, Month = t.Date.Month}
into temp
from t in temp.DefaultIfEmpty()
select new EmployeeProjectWorkingHours {
IDProject = h.IDProject,
Username = h.Username,
Year = h.Date.Year,
Month = h.Date.Month,
HoursPlanned = h.HoursPlanned ?? default(decimal),
HoursSpent = t.WorkHours ?? default(decimal)
};
var RightOuterJoin = from t in db.Timesheets
join h in db.WorkingHoursPerProject
on new { IDProject = t.IDProject, Username = t.Username, Year = t.Date.Year, Month = t.Date.Month } equals
new { IDProject = h.IDProject, Username = h.Username, Year = h.Date.Year, Month = h.Date.Month }
into temp
from h in temp.DefaultIfEmpty()
select new EmployeeProjectWorkingHours {
IDProject = h.IDProject,
Username = h.Username,
Year = h.Date.Year,
Month = h.Date.Month,
HoursPlanned = h.HoursPlanned ?? default(decimal),
HoursSpent = t.WorkHours ?? default(decimal)
};
var result = LeftOuterJoin.Union(RightOuterJoin).ToList();
我不断收到以下错误: 转换为值类型“System.Int32”失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可为空的类型。
所有 int 属性都不能为空。有人可以帮我解决这个问题吗?
【问题讨论】:
-
我没有读过你的查询,但如果是外连接,我猜有时找不到匹配的行,所以该列的数据库结果是
null。 This question might help 虽然我不使用实体框架/LINQ 查询语法,所以我可能错了。