我需要制作将运行 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 表达式中的(非)空检查,因为它知道属性不能为空。
当然,根据需要标记可为空的属性没有多大意义,因此您应该使其不可空或不需要。
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
var thresholdDate = GetDate(); var employeesWithNewOrNoStartDate = dbContext.Employees .Where(employee => employee.StartDate == null || employee.StartDate > thresholdDate);
用一句话来说:
从 all 的序列中Employees
,只取那些Employees
根本没有StartDate
的,或者有一个相当新的StartDate
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
var NewGroupEmployees = dbContext.Employees
.Where(employee => employee.StartDate == null
|| employee.StartDate > DateTime.Today).ToList();
这应该返回一个具有所需结果的列表。
您可以尝试的另一个选项是在 SQL 中创建一个存储过程并从您的应用程序中调用它。
- 3 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消