所以我有一个奇怪的问题。当我在数据表上进行linq查询时我得到了
"对象引用未设置为对象的实例。"
但是当结果使用forloop时它正常工作.dt是一个数据表
var productdata = from data in dt.AsEnumerable()
where data.Field<string>("Edited").ToString().ToUpper() == "NEW"
select data;//I get the object reference error here
foreach (var item in productdata) //but here the control goes inside the foreachloop even though the object refrence was null and the code gets executed correctly
{
//operation
}
只有在最后一个iteraton之后才会再次给出null引用异常。我不明白为什么会发生这种情况
答案 0 :(得分:4)
productdata
中的项目是懒惰产生的,异常可能发生在Where
子句中:
where data.Field<string>("Edited").ToString().ToUpper() == "NEW"
productdata
序列不为空,因此foreach可以开始执行,但是在调用MoveNext
并且访问Edited
字段并且发现为null之前不会抛出异常
答案 1 :(得分:1)
按如下方式更新您的linq查询:
var productdata = (from data in dt
where data.Field<string>("Edited").ToString().ToUpper() == "NEW"
select data)
.ToList();//I get the object reference error here
这将立即返回结果集,并验证foreach循环。
答案 2 :(得分:1)
为什么在这里使用linQ 您可以使用
简单地获得输出 var productdata = dt.Select("Edited='NEW'");
答案 3 :(得分:0)
我找到了答案。你看我通过读取excel文件来创建这个数据表。并且在文件中只有一行在编辑列中有“新”。其余的都是空的。一旦我将虚拟值放在其余的行中,它就开始完美地工作了。 Donno为什么会这样,但至少让我的代码工作