【问题标题】:T-SQL / EF Where Col is true and false to filter resultT-SQL / EF Where Col 为真假过滤结果
【发布时间】:2019-01-19 08:55:19
【问题描述】:

我得了臭感冒,我这辈子都无法动脑筋来解决这个问题!

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 列是 true 还是 false,因为这是不可能的,但我想要的是 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 子句的结果,以便它只显示已收集的项目。

我知道这可能真的很容易,但该项目昨天就要完成了,我实在是受不了这可怕的寒冷。

【问题讨论】:

  • 你在哪里使用(jobStop.TrailerId == trailer.TrailerId),这只会得到一行......因此jobStop.IsDelivery是真或假......所以你必须使用(| |) 而不是 (&&) 在第二个过滤器中
  • 您可以使用&gt;&lt; 代替CompareTo。我认为这是 EF 核心?

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


【解决方案1】:

您可以使用作业 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))))

【讨论】:

  • 联合收割机不起作用,因为它会显示所有未来交付的物品和所有收集的物品。这是一个需要过滤列表的情况,因此它当时只显示预告片上的项目。已经收集并准备交付的物品。我想知道是否会使用 .except() 或类似的情况。
  • 您的表中没有其他身份,例如工作 ID 或项目 ID?
  • 是的,我们有工作 ID。
  • 是的,使用工作 ID 你可以做到我已经更新了我的答案。
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多