比较两个LINQ查询,其中语句Hasvalue vs !=null

本文关键字:Hasvalue 语句 vs null 两个 查询 LINQ 比较 | 更新日期: 2023-09-27 18:06:21

我有这个函数有两个要求

  1. 只返回OrderDate值不是null的订单

  2. 返回在参数中指定的年份或之后的年份下的订单

哪个WHERE语句满足要求?,为什么?

static IQueryable<Order> lookUp (int year)
{
    using (DataClasses1DataContext  d = new DataClasses1DataContext())
    {
        var orders = from order in d.Orders
 This line ==>      where order.OrderDate.HasValue && order.OrderDate.Value.Year >=year
        OR ==>      where order.OrderDate.Value!=null && order.OrderDate.Value.Year >=year
                    select order;
        return orders.ToList();
    }
}

比较两个LINQ查询,其中语句Hasvalue vs !=null

HasValue将告诉您是否为null。Value将获得非空值,或抛出异常,如果它是空的。由于您不想在null值的情况下抛出,因此不应该使用第二个

使用!= null(在nullable本身上,而不是在它的.Value上)相当于使用HasValue(编译器生成HasValue调用)。那么,下列选项都是有效的,使用哪一个是文体上的选择。

where order.OrderDate.HasValue && ...
where order.OrderDate != null && ...