比较两个LINQ查询,其中语句Hasvalue vs !=null
本文关键字:Hasvalue 语句 vs null 两个 查询 LINQ 比较 | 更新日期: 2023-09-27 18:06:21
我有这个函数有两个要求
-
只返回
OrderDate
值不是null的订单 -
返回在参数中指定的年份或之后的年份下的订单
哪个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();
}
}
HasValue
将告诉您是否为null。Value
将获得非空值,或抛出异常,如果它是空的。由于您不想在null值的情况下抛出,因此不应该使用第二个
使用!= null
(在nullable本身上,而不是在它的.Value
上)相当于使用HasValue
(编译器生成HasValue
调用)。那么,下列选项都是有效的,使用哪一个是文体上的选择。
where order.OrderDate.HasValue && ...
where order.OrderDate != null && ...