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

我需要制作将运行 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 来检查两者。


慕码人2483693
浏览 188回答 3
3回答

料青山看我应如是

我似乎无法说出我在评论中的意思。几乎可以肯定,该属性StartDate已按要求映射。这可以通过数据注释来完成......[Required]public DateTime? StartDate { get; set; }...或通过流畅的映射,例如在OnModelCreating...modelBuilder.Entity<Employee>()&nbsp; &nbsp; .Property(e => e.StartDate).IsRequired();只有在这些情况下,EF 才会忽略 LINQ 表达式中的(非)空检查,因为它知道属性不能为空。当然,根据需要标记可为空的属性没有多大意义,因此您应该使其不可空或不需要。

泛舟湖上清波郎朗

var&nbsp;thresholdDate&nbsp;=&nbsp;GetDate(); var&nbsp;employeesWithNewOrNoStartDate&nbsp;=&nbsp;dbContext.Employees &nbsp;&nbsp;&nbsp;&nbsp;.Where(employee&nbsp;=>&nbsp;employee.StartDate&nbsp;==&nbsp;null &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;employee.StartDate&nbsp;>&nbsp;thresholdDate);用一句话来说:从 all 的序列中Employees,只取那些Employees根本没有StartDate的,或者有一个相当新的StartDate

肥皂起泡泡

var NewGroupEmployees = dbContext.Employees.Where(employee => employee.StartDate == null&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || employee.StartDate > DateTime.Today).ToList();这应该返回一个具有所需结果的列表。您可以尝试的另一个选项是在 SQL 中创建一个存储过程并从您的应用程序中调用它。
打开App,查看更多内容
随时随地看视频慕课网APP