如何通过这个错误";值不能为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传递给该方法,然后在该方法执行后删除它,然后遍历表。如有任何帮助,我们将不胜感激。
谢谢。
您有
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
似乎没有返回任何数据。