如何传递此错误"值不能为null.参数名称:实体"

kor*_*wan 2 c# linq-to-sql

        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);

                } 

             }  
Run Code Online (Sandbox Code Playgroud)

当执行上面的代码时,我收到此错误:

值不能为空.参数名称:实体

和matchedCaseNumber在此行中突出显示:

dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);

这是什么意思,为什么我得到它.我想要做的是将MatchedCaseNumber传递给方法,然后在执行该方法后删除它,然后逐步执行该表.任何帮助,将不胜感激.

谢谢.

Hen*_*man 6

你有

var matchedCaseNumber = (...).FirstOrDefault();

dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);
Run Code Online (Sandbox Code Playgroud)

那么如果matchedCaseNumber是null呢?这OrDefault使得可能.

将第二行更改为:

if (matchedCaseNumber != null)
    dc.reportsSents.DeleteOnSubmit(matchedCaseNumber);
Run Code Online (Sandbox Code Playgroud)

也,

int rowCount = dc.reportsSents.Count();

for(int i = 0; i <= rowCount;)
{
   ...
   i = (i +1);    
}
Run Code Online (Sandbox Code Playgroud)

应该成为:

for(int i = 0; i < rowCount; i += 1)  // note: NOT <=
{
    ...    
}
Run Code Online (Sandbox Code Playgroud)

你循环rowCount + 1次.移动i循环语句的增量确实没有意义.不要混淆/阻碍opitimizers.