在FirstOrDefault()上获取system.ArgumentNullException

时间:2017-06-28 07:47:09

标签: c# entity-framework linq repository

由于我无法在此处添加整个代码,因此我发布的是一个片段。 我收到并且异常" System.ArgumentNullException"以及一个无法从Ins_ProjectTestCycleDet_Result隐式转换为Project_List的错误。当我将最后一个参数添加为null(在ST之后)时,我开始收到此错误。请帮助我知道究竟是什么问题,即使在数据库中我已将此特定字段设置为Allow null。

Project_List objProject_List = new Project_List();
objProject_List.Proj_Bill_ID = Convert.ToInt32(PID);

objProject_List = _OCB.Ins_ProjectTestCycleDet
                   ( Convert.ToInt32(PID), TID, RID, ECY
                   , TT, Convert.ToDateTime(GD), Convert.ToDateTime(SD)
                   , Convert.ToDateTime(EED), Convert.ToDateTime(ED)
                   , null, Convert.ToDecimal(TP), Convert.ToDecimal(TE)
                   , Convert.ToDecimal(TDA), Convert.ToDecimal(TR), TCR, ST, null
                   ).FirstOrDefault();

2 个答案:

答案 0 :(得分:1)

如果在添加最后一个空参数后发生此异常,则应转到方法Ins_ProjectTestCycleDet并检查如何处理此参数。有两种可能性:

  1. 系统不接受null作为参数
  2. Ins_ProjectTestCycleDet(...)返回null
  3. 要修复第一种情况,您需要覆盖Ins_ProjectTestCycleDet(...)逻辑,以便null可以接受或提供非空值。

    要修复第二种情况,您可以将表达式更改为:

    objProject_List = _OCB.Ins_ProjectTestCycleDet(...)?.FirstOrDefault();
    

    在这种情况下,如果objProject_List返回null

    _OCB.Ins_ProjectTestCycleDet(...)将为null

答案 1 :(得分:0)

代码重组建议:

Project_List objProject_List = new Project_List();
objProject_List.Proj_Bill_ID = Convert.ToInt32(PID);

var projList = _OCB.Ins_ProjectTestCycleDet(Convert.ToInt32(PID), TID, RID, ECY,
               TT, Convert.ToDateTime(GD), Convert.ToDateTime(SD), Convert.ToDateTime(EED), Convert.ToDateTime(ED), null
               , Convert.ToDecimal(TP), Convert.ToDecimal(TE), Convert.ToDecimal(TDA), Convert.ToDecimal(TR), TCR, ST, null);

if(projList != null
   && projList.Count > 0
   && projList.FirstOrDefault() is Project_List)
{
    objProject_List = projList.FirstOrDefault();
}