如何通过这个错误";值不能为null.参数名称:实体"

本文关键字:quot 参数 null 实体 何通过 错误 不能 | 更新日期: 2023-09-27 17:58:10

        private void button1_Click(object sender, EventArgs e)
    {
        DataClasses1DataContext dc = new DataClasses1DataContext();
        var rec = dc.reportsSents.FirstOrDefault();
        int rowCount = dc.reportsSents.Count();

        if (rec != null)
            {
            for(int i = 0; i <= rowCount;)
                {

                    var matchedCaseNumber = (from CaseNumberKey in dc.GetTable<reportsSent>()
                                     select CaseNumberKey).FirstOrDefault();
                    (new MyReportRenderer()).RenderTest(Convert.ToString(matchedCaseNumber));
                    dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);
                    dc.SubmitChanges();
                    i = (i +1);
                } 
             }  

当上面的代码被执行时,我得到了这个错误:

值不能为null。参数名称:实体

匹配的CaseNumber在这一行中突出显示:

dc.reportsSents.DeleteOnSubmit(matchedCaseNumber(;

这意味着什么,我为什么要得到它。我试图做的是将MatchedCaseNumber传递给该方法,然后在该方法执行后删除它,然后遍历表。如有任何帮助,我们将不胜感激。

谢谢。

如何通过这个错误";值不能为null.参数名称:实体"

您有

var matchedCaseNumber = (...).FirstOrDefault();
dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);

那么,如果matchedCaseNumber为空呢?OrDefault使这成为可能。

将第二行更改为:

if (matchedCaseNumber != null)
    dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);

此外,

int rowCount = dc.reportsSents.Count();
for(int i = 0; i <= rowCount;)
{
   ...
   i = (i +1);    
}

应该变成:

for(int i = 0; i < rowCount; i += 1)  // note: NOT <=
{
    ...    
}

您正在循环rowCount+1次。将i的增量移出循环语句确实没有意义。不要混淆/阻碍阿片类药物。

matchedCaseNumber在传递给DeleteOnSubmit 时可能是null

if(matchedCaseNumber != null)
{
  dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);
  dc.SubmitChanges();
}

编辑:如果我正确理解你想做什么,这会更好:

private void button1_Click(object sender, EventArgs e)
{
    DataClasses1DataContext dc = new DataClasses1DataContext();
    foreach (var item in dc.reportsSents)
    {
        (new MyReportRenderer()).RenderTest(Convert.ToString(item));
        dc.reportsSents.DeleteOnSubmit(item);
    }
    dc.SubmitChanges();
}

这意味着matchCaseNumber就是null

创建matchCaseNumber时,使用.FirstOrDefault(),它返回该类型的第一个实例或默认值(对于引用类型为null(。

换句话说,您的查询:

from CaseNumberKey in dc.GetTable<reportsSent>()
select CaseNumberKey

似乎没有返回任何数据。