【问题标题】:Why LINQ can't pick up the null value C#为什么 LINQ 无法获取空值 C#
【发布时间】:2018-08-21 17:42:10
【问题描述】:

我尝试使用 LINQ 过滤数据,数据来自 3rd 方 API(JIRA 服务器),ResolutionDateis DateTime 类型,我猜它使用 Nullable,无论如何,我很确定该值为 null,但是当我使用 LINQ,它根本不起作用。 LINQ 就是不能做 i.ResolutionDate == null,它总是说没有符合这个条件的项目。我很确定我有问题,他们的 ResolutionDate 为空。

https://developer.atlassian.com/server/jira/platform/database-issue-fields/

var foo = datas.Where(i =>
                i.Created > date && i.Created <= date.AddDays(7) && 
i.ResolutionDate> date.AddDays(7) && i.ResolutionDate== null);

【问题讨论】:

  • i.ResolutionDate的类型是什么?
  • i.ResolutionDate 不能同时为未来 7 天以上的日期且同时为空。
  • 应该是||而不是 &&?
  • 您“非常确定”存在 ResolutionDate 为空的项目?在您开始想知道为什么 LINQ 不起作用之前,也许您应该完全确定。
  • 是的,抱歉示例代码不正确,var foo = datas.Where(i => i.Created > date && i.Created date .AddDays(7) || i.ResolutionDate== null);那么在这种情况下,它会变成(i.Created > date && i.Created date.AddDays(7)) 或 i.ResolutionDate== null,但我的一切在 AND 中还包括 i.ResolutionDate== null

标签: c# linq datetime jira jira-rest-api


【解决方案1】:

你可以将它们合并成(i.ResolutionDate?.Date &gt; date.AddDays(7))

最终,当您进行比较时,它应该有一些条件会返回true

【讨论】:

    【解决方案2】:

    您应该检查 ResolutionDate 的值是否为 null OR 超过 7 天

    var foo = datas.Where(i =>
                    i.Created > date && i.Created <= date.AddDays(7) && 
                    (i.ResolutionDate == null || i.ResolutionDate > date.AddDays(7)));
    

    【讨论】:

    • 我想检查未解决的问题,所以我想检查 ResolutionDate 是否为 null 或 ResolutionDate 是否在本周之后。
    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多