1

如果“订单”集合为空,我想知道以下表达式返回 null 的最佳方式。目前“第一”引发了一个例外。我试过“FirstOrDefault”但没有成功。

表达方式:

var myOrderItems = Model.Orders.First(o => o.Id == 1).OrderItems.ToList();

如果没有订单,那么我希望“myOrderItems”为空。

这是一个示例查询,因为我想将推荐的答案应用于其他查询。

编辑:我目前在 ViewModel 中将“订单”定义为:

List<Orders> _myOrders;

可能应该定义为:

List<Orders> _myOrders = new List<Orders> or something else to make it empty??????? 
4

4 回答 4

2
var myOrderItems = Model.Orders == null ? null : Model.Orders.First(o => o.Id == 1).OrderItems.ToList();
于 2013-06-24T15:21:59.220 回答
2

尝试这个:

var myOrderItems = ((Model.Orders ?? Enumerable.Empty<YourType>())
                       .FirstOrDefault(o => o.Id == 1) ?? SomeNonNullDefault).OrderItems.ToList();

如果您正在使用,请添加AsQueryableafter ,而不是.Enumerable.EmptyIQueryableIEnumerable

于 2013-06-24T15:23:23.150 回答
0

如果没有Orders 那么我myOrderItems只想成为null

这是处理这个问题的错误方法。如果没有Orders,那么Orders 应该返回一个空集合,但不是null。如果可能,修复它。在任何情况下,不要对 . 重复同样的错误myOrderItems

于 2013-06-24T22:16:09.153 回答
0
List<OrderItems> myOrderItems = null;
if (Model.Orders != null)
{
    var order = Model.Orders.FirstOrDefault(o => o.Id == 1);

    if (order != null)
    {
        myOrderItems = order.OrderItems.ToList();
    }
}
于 2013-06-24T21:19:45.443 回答