首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地过滤可空的DateOnly?

如何正确地过滤可空的DateOnly?
EN

Stack Overflow用户
提问于 2022-06-07 11:18:39
回答 2查看 459关注 0票数 0

我已经成功地在EF 6实体上配置了一个DateOnly属性,如下所示

除了该属性是可空的这一事实之外,一切都很正常。当我试图过滤Prperty1 < [some-date]所在的实体时,会出现这个问题,因为EF并不认为null比任何东西都小,所以它被排除在结果之外。

如何让EF理解null在过滤该属性时基本上小于或等效于DateOnly.MinValue

我已经尝试过在我的转换器中用DateOnly替换DateOnly?,但这并没有什么区别。

代码语言:javascript
复制
public class MyEntity
{
    public DateOnly? Property1 { get; private set; }
}

配置:

代码语言:javascript
复制
builder
    .Property(x => x.Property1)
    .HasConversion(DateOnlyRelationalTypeMapping.Converter)
    .HasColumnType("date");

关系类型映射:

代码语言:javascript
复制
public sealed class DateOnlyRelationalTypeMapping : RelationalTypeMapping
{
    internal DateOnlyRelationalTypeMapping() 
        : this(
            new RelationalTypeMappingParameters(
                new CoreTypeMappingParameters(
                    typeof(DateOnly),
                    Converter),
                "date"))
    {
    }

    private DateOnlyRelationalTypeMapping(RelationalTypeMappingParameters parameters)
        : base(parameters)
    {
    }

    public static new readonly ValueConverter<DateOnly, DateTime> Converter =
        new(
            clrValue => clrValue.ToDateTime(TimeOnly.MinValue),
            dbValue => DateOnly.FromDateTime(dbValue));

    protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters) 
        => new DateOnlyRelationalTypeMapping(parameters);
}
EN

回答 2

Stack Overflow用户

发布于 2022-06-07 11:26:58

你可以自己加上那张支票。

而不是依赖EF:

代码语言:javascript
复制
dbContext.Entities.Where(e => e.Property1 < someDate); // does not work

添加包含有null日期的实体的约束:

代码语言:javascript
复制
dbContext.Entities.Where(e => e.Property1 != null || e.Property1 < someDate);

请注意,此行为与EF无关。这就是SQL比较值的方式。与任何事物相比,DB NULL返回布尔结果NULL --既不为真,也不为假。当SQL WHERE子句中包含布尔检查时,除true以外的任何值(也代表NULL )都将被排除在输出之外。

票数 1
EN

Stack Overflow用户

发布于 2022-06-07 11:29:58

比较应该是:DateOnly属性是空的还是小于指定的命运?

代码语言:javascript
复制
.....Where(x => x.Property1 == null || x.Property1 < targetDate);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72530263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档