属性'Int32 Year'未定义类型'System.Nullable`1 [System.DateTime]'比较两个日期的年份

时间:2017-07-24 15:15:51

标签: c# entity-framework entity-framework-core

在比较日期时间时,我有一个奇怪的例外。

示例代码:

_dbContext.Details.Where(x => x.Person.Birth.Year == date.Year);

出生日期和日期都不可为空日期。

异常消息:

Message: System.ArgumentException : Property 'Int32 Year' is not defined for type 'System.Nullable`1[System.DateTime]'

我尝试在内存中设置数据库的单元测试中运行代码。

3 个答案:

答案 0 :(得分:0)

我的模型定义错误,我没有正确指定外键。

看起来与此类似(从PerId重命名为PersonId后,问题就消失了):

public class Person
{
    public int Id {get; set;}
    public DateTime Birth {get; set;}
}

public class Details 
{
    public int Id {get; set;}
    public int PerId {get; set;}
    public Person Person {get; set;}
}

答案 1 :(得分:0)

如果它可以为空,则需要访问:

date.Value.Year

答案 2 :(得分:0)

所以,似乎你有" DateTime?"而不是" DateTime"。这样,你必须检查类似的东西:

_dbContext.Details.Where(x => date.HasValue && (x.Person.Birth.Year == date.Value.Year));