为了账号安全,请及时绑定邮箱和手机立即绑定

LINQ to SQL 检查日期时间是否为空或小于当前日期

LINQ to SQL 检查日期时间是否为空或小于当前日期

C#
慕码人2483693 2021-12-05 16:32:09
我需要制作将运行 SQL 查询的 LINQ 查询    Select * from Employee where Employee.StartDate is null OR (Employee.StartDate is not null AND Employee.StartDate > GetDate())我试过以下代码    Employee.Where(e => e.StartDate == null || (e.StartDate != null && e.StartDate > Datetime.Today);    Employee.Where(e => e.StartDate.HasValue == false || (e.StartDate.HasValue != false && e.StartDate > Datetime.Today);    Employee.Where(e => e.StartDate..Equals((DateTime?)null) || (e.StartDate.HasValue != false && e.StartDate > Datetime.Today);但它没有生成正确的 SQL 来检查两者。
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

我似乎无法说出我在评论中的意思。几乎可以肯定,该属性StartDate已按要求映射。这可以通过数据注释来完成......


[Required]

public DateTime? StartDate { get; set; }

...或通过流畅的映射,例如在OnModelCreating...


modelBuilder.Entity<Employee>()

    .Property(e => e.StartDate).IsRequired();

只有在这些情况下,EF 才会忽略 LINQ 表达式中的(非)空检查,因为它知道属性不能为空。


当然,根据需要标记可为空的属性没有多大意义,因此您应该使其不可空或不需要。


查看完整回答
反对 回复 2021-12-05
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

var thresholdDate = GetDate();
var employeesWithNewOrNoStartDate = dbContext.Employees
    .Where(employee => employee.StartDate == null
                    || employee.StartDate > thresholdDate);

用一句话来说:

从 all 的序列中Employees,只取那些Employees根本没有StartDate的,或者有一个相当新的StartDate


查看完整回答
反对 回复 2021-12-05
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

var NewGroupEmployees = dbContext.Employees

.Where(employee => employee.StartDate == null

                || employee.StartDate > DateTime.Today).ToList();

这应该返回一个具有所需结果的列表。


您可以尝试的另一个选项是在 SQL 中创建一个存储过程并从您的应用程序中调用它。


查看完整回答
反对 回复 2021-12-05
  • 3 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信