【问题标题】:lambda expression with nullable value - always false since the value of type Guid is never equal to 'null'具有可为空值的 lambda 表达式 - 始终为 false,因为 Guid 类型的值从不等于“null”
【发布时间】:2021-12-30 04:02:06
【问题描述】:
public class Car
{
    public int Id {get; set;}
    public Guid? OwnersId { get; set; }
    ...
}

我正在尝试根据条件获取所有汽车数据

List<Car> cars = await carsContext.Query(x=>x.Id== model.CarId && x.OwnersId.Value == null);

表达式的结果总是假的,因为 type 的值 Guid 永远不等于“Guid”类型的“null”?

【问题讨论】:

    标签: c# linq .net-core


    【解决方案1】:

    Value 结构的Value 属性返回基础类型的值(在您的情况下为Guid),它不能是null。将 OwnersId 本身与 null 进行比较:

    List<Car> cars = await carsContext
        .Query(x => x.Id == model.CarId && x.OwnersId == null);
    

    另一种选择是检查HasValue 属性:

    List<Car> cars = await carsContext
        .Query(x => x.Id == model.CarId && !x.OwnersId.HasValue);
    

    虽然这是否会转化为有效的 SQL 取决于您使用的 ORM。

    【讨论】:

    • 我试过这个,但我得到的是空的结果集,虽然我在检查 db 时确定不是这种情况
    • @user1765862 生成的sql检查了吗?
    • @user1765862 你用的是什么ORM,Query 方法是什么?
    【解决方案2】:

    “值”属性永远不会为空。如果 OwnersId 为 null,则调用 .Value 将引发异常。您应该检查 HasValue。所以你可以这样做:

    List<Car> cars = await carsContext.Query(x=>x.Id== model.CarId && !x.OwnersId.HasValue);
    

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 2011-10-09
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      相关资源
      最近更新 更多