LINQ错误:不能将null值分配给类型为System.Int32的成员,该成员是不可为null值的类型

本文关键字:成员 null 类型 错误 Int32 分配 LINQ 不能 System | 更新日期: 2023-09-27 18:28:38

我有以下查询:

var query = (from t1 in table1.Where(c => c.ServiceID == 2 && c.IsDeleted == 1)
             from t2 in table2.Where(c => c.RelServiceBonID == t1.RelServiceBonID && c.IsDeleted == 1).DefaultIfEmpty()
             from t3 in table3.Where(c => c.BonID == t1.BonID && c.UserID == 8 && c.IsDeleted == 1).DefaultIfEmpty()
             from t4 in table4.Where(c => c.BonID == t1.BonID && c.IsDeleted == 1)
             select new
             {                                  
                 t3.UserID, t2.SubServiceID,
             });
query.Dump();

当我运行时,我得到了以下错误:

不能将null值分配给类型为System.Int32的成员,该成员是不可为null值的类型。

UserID字段是主键,我不能将其设置为null!

如何传递此错误?

LINQ错误:不能将null值分配给类型为System.Int32的成员,该成员是不可为null值的类型

UserID字段是主键,我不能将其设置为可为null的

正如hvd在下面解释的那样,因为您实际上有一个外部联接,所以UserID仍然可以为null。除此之外,SubServiceID也可以为空。通常,将罪魁祸首强制转换为可为null的类型会有所帮助:

 select new
 {                                  
     UserID = (int?)t3.UserID, 
     SubServiceID = (int?)t2.SubServiceID
 });