【问题标题】:Linq query on a Date giving an error "Nullable object must have a value."日期上的 Linq 查询给出错误“可空对象必须有一个值”。
【发布时间】:2023-03-21 21:45:01
【问题描述】:

我有一个对象列表,我要传递给一个函数,在该函数中我想过滤掉特定公司的记录,以及 DateTime 字段是否是今天。

我收到一条错误消息“可空对象必须有一个值。”当我这样做时,我相信这是因为某些“Verified_Date”字段为空,但不是全部。

这是我想出的 LINQ。有没有一种方法可以过滤掉特定公司,如果有 Verified_Date = today,即使某些记录的 Verified_Date = NULL?

var today = DateTime.Today;
var listFiltered = data.Where(d => d.CompanyCode == companyCode && d.VerifiedDate.Value.Date == today).ToList();

【问题讨论】:

  • 但您想包含那些为空的记录吗?
  • 不在此列表中。我只想要今天已验证的记录。我还有另一个功能,用于提取过去 10 天内未验证的邮件并从那里发送提醒电子邮件。

标签: entity-framework linq


【解决方案1】:

你可以试试这个:

var today = DateTime.Today;
var listFiltered = data.Where(d => d.CompanyCode == companyCode 
                                && d.VerifiedDate!=null
                                && d.VerifiedDate.Value.Date == today).ToList();

【讨论】:

  • 看起来可行!我要做更多的测试,但这看起来不错。感谢您的帮助!
  • 不客气。 Nullable 还有一个名为HasValue 的属性,您应该也可以使用它来检查它是否不为空。
  • 使用 != null 与 HasValue 有任何性能问题,或者其中一种方法比另一种更好?
  • 不,是一样的
【解决方案2】:

检查VerifiedDate 在您的Where 条件中是否为空。

var listFiltered = data.Where(d => d.CompanyCode == companyCode
                                && d.VerifiedDate != null
                                && d.VerifiedDate.Value.Date == DateTime.Today)
                       .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2010-12-26
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多