T-SQL / EF其中Col为true和false来过滤结果

时间:2019-01-19 08:55:19

标签: c# sql-server entity-framework tsql lambda

我感冒得很厉害,不能一辈子都动脑筋去解决这个问题!

jobStops.Where(jobStop => jobStop.TrailerId == trailer.TrailerId && 
              (jobStop.IsDelivery == true && 
               jobStop.JobStopDateTime.Value.Date.CompareTo(date.AddDays(x).Date) >= 0) && 
              (jobStop.IsDelivery == false && 
               jobStop.JobStopDateTime.Value.Date.CompareTo(date.AddDays(x).Date) <= 0))

很明显,我知道我们无法知道列的真假位置,因为那是不可能的,但是我所需要的是两次读取where语句以筛选自身的条件。

所以上面的查询基本上是说,从数据库中获取将来要交付的拖车行以及过去收集的拖车行,所以我知道当时的拖车。

(jobStop.IsDelivery == true && 
 jobStop.JobStopDateTime.Value.Date.CompareTo(date.AddDays(x).Date) >= 0)

这处理了将来要交付的物品

(jobStop.IsDelivery == false && 
 jobStop.JobStopDateTime.Value.Date.CompareTo(date.AddDays(x).Date) <= 0)

这最终是为了过滤掉上述where子句的结果,使其仅显示已收集的项目。

我知道这可能真的很容易,但是该项目应该在昨天完成,而我只是无法忍受这种令人发指的寒冷。

1 个答案:

答案 0 :(得分:0)

您可以使用工作ID来完成

jobStops.Where(jobStop => ((jobStop.TrailerId == trailer.TrailerId && jobStop.JobId ==trailer.JobId)&& (
              (jobStop.IsDelivery == true && jobStop.JobStopDateTime.Value.Date.CompareTo(date.AddDays(x).Date) >= 0) ||
              (jobStop.IsDelivery == false && jobStop.JobStopDateTime.Value.Date.CompareTo(date.AddDays(x).Date) <= 0))))