微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按空值过滤的内存数据库不起作用

如何解决按空值过滤的内存数据库不起作用

我有一段工作代码,我想用单元测试来覆盖它。然而,微软的内存数据库返回了一些意想不到的值。

如果我这样查询

var count = query.Count(c => c.Birthday2000 != null);

结果是 0,虽然应该是 12。

如果我这样查询

var count = query.ToList().Count(c => c.Birthday2000 != null);

结果是 12,这是预期的。

如果我用我的关系数据库 (MysqL) 运行它,第一行也能工作。

我有以下模型

public class Customer
{
    public DateTime? BirthDay {get; set; }
    private DateTime? _birthday2000;
    public DateTime? BirthDay2000 
    {
        get
        {
            if (BirthDay == null) _birthday2000 = null;
            else _birthday2000 = new DateTime(2000,BirthDay.Value.Month,BirthDay.Value.Day);
            return _birthday2000;
        }
        set => _birthday2000 = value;
    }
}

什么可能导致这个问题?

我的目标是查询数据库中接下来的 n 个生日。我无法对 BirthDay 进行排序和过滤,因为年份部分不同,这就是我引入 BirthDay2000 属性的原因,其中年份设置为固定年份。

当我通过网络服务接收新客户时,我使用自定义 g/setter 自动设置它。

解决方法

您的 BirthDay2000 不仅在将 EF.Core 映射到任何类型的数据库时无效(ORM 使用数据对象,而不是逻辑对象),而且就属性而言,它也相当无效:你的吸气剂有副作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。