C# Datetime的LINQ到SQL检查为null或小于当前日期
我需要进行LINQ查询,该查询将运行SQL查询C# Datetime的LINQ到SQL检查为null或小于当前日期,c#,entity-framework,linq,datetime,C#,Entity Framework,Linq,Datetime,我需要进行LINQ查询,该查询将运行SQL查询 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 &&
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来检查这两个
var thresholdDate = GetDate();
var employeesWithNewOrNoStartDate = dbContext.Employees
.Where(employee => employee.StartDate == null
|| employee.StartDate > thresholdDate);
简言之:
从所有员工
的顺序中,仅选取那些根本没有起始日期
的员工,或者具有全新的起始日期
var NewGroupEmployees = dbContext.Employees
.Where(employee => employee.StartDate == null
|| employee.StartDate > DateTime.Today).ToList();
简言之:
从所有员工
的顺序中,仅选取那些根本没有起始日期
的员工,或者具有全新的起始日期
var NewGroupEmployees = dbContext.Employees
.Where(employee => employee.StartDate == null
|| employee.StartDate > DateTime.Today).ToList();
这将返回一个包含所需结果的列表
您可以尝试的另一个选项是在SQL中创建存储过程,并从应用程序中调用它
这将返回一个包含所需结果的列表
您可以尝试的另一个选项是在SQL中创建一个存储过程,并从应用程序中调用它。我似乎不知道我在注释中的意思。几乎可以肯定,属性
StartDate
是根据需要映射的。这可以通过数据注释来完成
[Required]
public DateTime? StartDate { get; set; }
…或通过流畅的映射,例如在OnModelCreating
modelBuilder.Entity<Employee>()
.Property(e => e.StartDate).IsRequired();
modelBuilder.Entity()
.Property(e=>e.StartDate).IsRequired();
只有在这些情况下,EF才会忽略LINQ表达式中的(not-)null检查,因为它知道属性不能为null
当然,将一个可为null的属性标记为required没有多大意义,所以您应该要么使其不可为null,要么使其不为required。我似乎不知道我在注释中的意思。几乎可以肯定,属性
StartDate
是根据需要映射的。这可以通过数据注释来完成
[Required]
public DateTime? StartDate { get; set; }
…或通过流畅的映射,例如在OnModelCreating
modelBuilder.Entity<Employee>()
.Property(e => e.StartDate).IsRequired();
modelBuilder.Entity()
.Property(e=>e.StartDate).IsRequired();
只有在这些情况下,EF才会忽略LINQ表达式中的(not-)null检查,因为它知道属性不能为null
当然,将可为Null的属性标记为required没有多大意义,因此您应该将其设置为not nullable或not required。LINQ to SQL!=实体框架。您使用哪种ORM?您能显示这些语句生成的SQL吗?我使用EF 6.0SQL语句生成的目的只是检查StartDate是否大于当前值,而不是检查nullIs
StartDate
是否根据需要通过属性或流畅的映射进行映射?LINQ到SQL!=实体框架。您使用哪种ORM?您能显示语句生成的SQL吗?我使用EF 6.0SQL语句生成来检查StartDate是否大于当前值,而不检查nullIsStartDate
是否按要求映射,通过属性还是通过fluent映射?我运行了SQL Profiler,生成的SQL不会生成检查null的检查在这种情况下,StartDate似乎不可为null(至少在模型中)Ankit:也许你应该编辑这个问题并添加你的员工classI-ran SQL Profiler,SQL generated不会生成检查null的检查在这种情况下,StartDate似乎不可为null(至少在模型中)Ankit:也许你应该编辑问题并添加你的员工
类。很遗憾,这不编译到必需的SQL查询,也不检查空日期。很遗憾,这不编译到必需的SQL查询,也不检查空日期