【发布时间】:2016-08-15 12:40:53
【问题描述】:
下面代码中的Any函数有什么原因会失败吗?
var orders = db.Order.Where(order => order.Item.Any());
foreach (var order in orders)
{
var first = order.Item.First(); // NullReferenceException thrown here: order.Item == null
}
也许我只是在这里误解了一些东西,但在我看来 order.Item 不应该为空,因为之前的 Any 声明。
编辑:如果我通过在其中放置 ToList 来确保对表达式进行评估而不是延迟,我会得到另一个异常,因为 order.Item 序列没有项目,这也让我感到困惑:
var orders = db.Order.Where(order => order.Item.Any()).ToList();
foreach (var order in orders)
{
var first = order.Item.First(); // System.InvalidOperationException thrown here: order.Item.Count == 0
}
【问题讨论】:
-
order.Item的类型是什么? -
它是
Item,源自我模型中的Item表。订单可以有 0 到 n 个项目 -
你在使用EntityFramework吗?
-
“Item”不是一个结构,对吧?
-
@Adil:不,我的模型代码是使用 SQLMetal 生成的。