C# 完全外部联接:转换为值类型“System.Int32”失败,因为具体化值为null

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 =

我想在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属性中的非可为空。有人能帮我一下吗?

在您在“选择新员工项目工作时间”中使用的第二个查询中
h,它是来自DefaultIfEmpty的。当h为空时会发生什么?因此,我认为IDProject、Username、Year、Month必须是t而不是h中的指定值。

如果返回的是值类型,并且该值可能丢失,则需要将其强制转换为null,以便linq/entity framework返回正确的值。例如IDProject=int?h.IDProject

我还没有读过你的查询,但是如果它是一个外部连接,我猜有时找不到匹配的行,因此该列的数据库结果为空。虽然我没有使用实体框架/LINQ查询语法,所以我可能是错的。