C# 完全外部联接:转换为值类型“System.Int32”失败,因为具体化值为null
我想在C中做一个完整的外部连接,就像这样C# 完全外部联接:转换为值类型“System.Int32”失败,因为具体化值为null,c#,linq,C#,Linq,我想在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 =
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属性中的非可为空。有人能帮我一下吗?在您在“选择新员工项目工作时间”中使用的第二个查询中
h,它是来自DefaultIfEmpty的。当h为空时会发生什么?因此,我认为IDProject、Username、Year、Month必须是t而不是h中的指定值。如果返回的是值类型,并且该值可能丢失,则需要将其强制转换为null,以便linq/entity framework返回正确的值。例如IDProject=int?h.IDProject我还没有读过你的查询,但是如果它是一个外部连接,我猜有时找不到匹配的行,因此该列的数据库结果为空。虽然我没有使用实体框架/LINQ查询语法,所以我可能是错的。