如何在LINQ表达式中处理Null?

时间:2013-06-24 15:19:10

标签: linq linq-to-sql linq-to-entities

如果“Orders”集合为null,我想知道以下表达式返回null的最佳方法。目前“First”引发了一个例外。我试过“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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

试试这个:

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

如果您使用AsQueryable而不是Enumerable.Empty,请在IQueryable之后添加IEnumerable

答案 2 :(得分: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();
    }
}

答案 3 :(得分:0)

  

如果没有Order,那么我希望myOrderItems成为null

这是解决这个问题的错误方法。如果没有Order,那么Order应返回空集合,但不是null 。如果可能,解决这个问题。在任何情况下,请勿使用myOrderItems重复相同的错误。