繁体   English   中英

实体框架核心 where 子句额外条件

[英]Entity Framework Core where clause extra condiition

我有这个简单的查询,问题是End属性是DateTime? 类型,我想包括该值为空的记录,但我似乎无法做到。 我尝试使用三元运算符,但仍然没有结果

await _context.Registos
    .Where(r => r.Start.Date >= DateStart.Date && r.End.HasValue ? r.End.Value <= DateEnd.Date : !r.End.HasValue )
    .AsNoTracking()
    .ToListAsync();

一种更清洁的方式,如下所示:

await _context.Registos
    .Where(r => r.Start.Date >= DateStart.Date 
        && (r.End == null || r.End.Value <= DateEnd.Date))
    .AsNoTracking()
    .ToListAsync();
await _context.Registos
    .Where(r => r.Start.Date >= DateStart.Date && 
              (!r.End.HasValue || (r.End.Value <= DateEnd.Date)) )
    .AsNoTracking()
    .ToListAsync();

在 C# 中拥有一个没有被赋值的变量的唯一方法是让它成为一个局部变量 - 在这种情况下,在编译时你可以通过尝试读取它来判断它不是绝对赋值的: )

我怀疑你真的想要Nullable<DateTime> (或 DateTime? 使用 C# 语法糖) - 让它开始为 null,然后分配一个正常的 DateTime 值(它将被适当转换)。 然后,您可以与 null(或使用 HasValue 属性)进行比较,以查看是否已设置“真实”值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM