【问题标题】:Linq expression with nullable DateTime具有可为空 DateTime 的 Linq 表达式
【发布时间】:2015-07-15 13:57:32
【问题描述】:

我想查询一个可以为空的 DateTime 的实体,例如,选择所有 2005 年建造的汽车:

public class Car() {
    public int Id {get; set;}
    public DateTime? DateBuilt {get; set;}
    ...
}

我的 Linq 表达式通常看起来像这样:

int carsIn2005 = context.Cars.Count(x => x.DateBuilt.Year == "2005");

但我不能使用 .Year,因为 Date 可以为空。我用谷歌搜索了一下,发现了一些关于合并操作符的东西,但不能从中做出有用的东西。如果 Linq 了解以下内容,那就太酷了:

int carsIn2005 = context.Cars.Count(x => x.DateBuilt.HasValue && x.DateBuilt.Year == "2005");

如果 DateBuilt != null 那么我应该能够将其视为 DateTime。

【问题讨论】:

  • x.DateBuilt != null && x.DateBuilt.Year == 2005 怎么样?
  • @DavidG:嗯,x.DateBuilt != null && x.DateBuilt.Value.Year == 2005
  • 请注意,即使DateBuilt 不可为空,您也无法将intstring 进行比较...
  • @JonSkeet 永远领先一步 :)
  • 或在 C# 6 中:x.DateBuilt?.Year == 2005

标签: c# linq


【解决方案1】:

试试这个

int carsIn2005 = context.Cars.Count(x => x.DateBuilt != null && x.DateBuilt.Value.Year == 2005);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多