c# - 比较两个 LINQ 查询,其中语句 Hasvalue 与 !=null

标签 c# linq where-clause datacontext

我这个函数有两个要求

  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();
    }
}

最佳答案

HasValue会告诉你它是否为空。 Value将获取非空值,如果为空则抛出异常。由于您不想抛出 null 值,因此不应使用第二个。

使用 != null (在可空值本身上,而不是在它的 .Value 上)相当于使用 HasValue (编译器生成一个 HasValue 调用)。那么,以下内容都是有效的,使用哪一个是一种风格选择。

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

关于c# - 比较两个 LINQ 查询,其中语句 Hasvalue 与 !=null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983968/

相关文章:

mysql - 当它不等于另一个表中的外键时,如何从表中的主键中选择数据?

c# - 不同类型泛型类的通用类型

c# - 这可以通过 javascript 实现吗?

c# - 防止在设计时调整高度控件的大小

c# - Docker RabbitMQ 消息在重启时消失

xml - LINQ to XML 查询属性

c# - Blazor 将数据从父级传递给子级

c# - Asp.net MVC PagedList 顺序

C# XML,查找节点及其所有父节点

c# - WHERE IN 子句