LINQ 中的不一致错误 无法将空值分配给类型为 System.Int32 的成员,该成员是不可为空的值类型

本文关键字:成员 类型 Int32 System 空值 分配 不一致 LINQ 错误 | 更新日期: 2023-09-27 18:35:15

我知道有很多与此问题相关的链接,但我的情况有些奇怪。tbEHDepartments和tbEHAccesses表是新添加的,因此在tbEHUsers表中对它们的引用为空。据我了解和搜索列中的 NULL 值是错误的原因,但在 ManagerID 为空的情况下有效。我的意思是说如果我删除 grp1。选择查询的部门 ID 一切正常,即使经理 ID 为空。

var data = from t in db.tbEHUsers.DefaultIfEmpty()
           join t3 in db.tbEHUsers.DefaultIfEmpty() on t.ManagerID equals t3.UserID into t2
           from grp in t2.DefaultIfEmpty()
           join d in db.tbEHDepartments.DefaultIfEmpty() on t.DeptID equals d.DeptID into t4
           from grp1 in t4.DefaultIfEmpty()
           join a in db.tbEHAccesses.DefaultIfEmpty() on t.AccessID equals a.AccessID into t5
           from grp2 in t5.DefaultIfEmpty()
           orderby t.FirstName
           select new { t.UserID, t.UserName, t.FirstName, t.LastName, t.Email, t.ManagerID, TeamLead = grp.FirstName + " " + grp.LastName, grp1.DeptID };//, grp1.DeptName, grp2.AccessID, AccessName=grp2.Name };
var dt = Utility.ToDataTable(data);

LINQ 中的不一致错误 无法将空值分配给类型为 System.Int32 的成员,该成员是不可为空的值类型

ManagerID 和 USerID 的数据类型是否相同?其中一个是否可为空,因此"Int32"? ?

有时,在数据库中遇到数据之前,不会引发此类错误。