【问题标题】:Linq dynamic query (Except - but SQL SERVER side)Linq 动态查询(除了 - 但 SQL SERVER 端)
【发布时间】:2020-05-22 09:22:30
【问题描述】:

我想返回日期列大于DateTime.Now.AddDays(-3) 的记录,但前提是类型列完整。 意思是,我想返回除超过 3 天且类型为 == 完整(枚举 1)的记录之外的所有内容。

这几乎就像我需要除外,但为此,我需要枚举结果,然后我不会有我的结果页码 (.Take(10))。

这将如何在 linq 中完成?我无法弄清楚这个查询的外观。我希望查询尽可能在 SQL SERVER 端完成,以提高效率。

明确一点 - 我想要所有结果,除了已完成且超过 3 天的记录。

(完成意味着类型列值== 1(枚举))

我的项目是 .NetCore 3.1

谢谢

【问题讨论】:

  • 你不需要Except,而是Where。发布您的实体类以获得更具体的答案。

标签: c# sql-server linq entity-framework-core


【解决方案1】:

我不确定您所说的“类型”列是什么意思,但我猜是您所追求的对象的值。

那么你可能应该这样做:

var dateRange = DateTime.Now.AddDays(-3);
var results = _repository.Entity.Where(w => w.Date >= date && w.Type != null);

【讨论】:

  • 我只有一个名为 Type 的列。问题是,我想返回所有记录,但如果记录的类型等于 Complete (Enum(1)) 并且超过 3 天,我不想要它。这有意义吗?
  • 当然@Stefanos,目前就这么简单。 //所有结果,除了已完成(Enum 1)和超过 3 天的结果。 Approvals.Where(某些条件).Take(10).ToList()
  • 你可以做 var results = _repository.Entity.Where(w => w.Date >= date && w.Type != enumName.Complete);如果 w.Type 是字符串,请记住您需要通过添加“.ToString()”将枚举转换为字符串
  • 感谢@Stefanos,但我确实希望完成的记录更新于 -3 天 - 不超过 -3 天,以及其余记录。
【解决方案2】:

也许是这样的?

Results = context.Entity.Where(x => x.Date > DateTime.Now.AddDays(-3) || x.Type != YourEnum.Complete);

【讨论】:

  • 感谢 Matthijs,但我确实想要其他超过 3 天的记录。这只是我想应用“超过 3 天条款”的已完成记录。如果这有意义的话。
  • 您将获得类型不是完整的所有记录,与日期无关(它是一个 OR),但如果类型 == 完整,则日期需要比 3 天前新跨度>
  • 但是您的建议过滤掉所有已完成的记录,无论日期如何?
【解决方案3】:

这可能是你需要的吗?

  Var results = context.Entity.Where(x=> x.Type != enum.Completed ||( x.Type == enum.Completed && x.Date >=DateTime.Now.AddDays(-3)));

【讨论】:

  • 谢谢,Stefano,但我确实希望包含已完成的记录,只要它们比 DateTime.Now.AddDays(-3) 更新。除了所有其他记录。上面的查询将确保根本不会返回任何已完成的记录。
  • 所以你想要完成的记录只有在 3 天后才更新,我明白了吗?我已经编辑了该案例的答案
  • 是的,但除了该表中的所有其他记录之外,无论它是否已完成。我看到您刚刚更新了答案以反映这一点,我想就是这样!我想你破解了它。谢谢斯特凡诺!!
猜你喜欢
  • 2010-09-20
  • 2017-01-11
  • 1970-01-01
  • 2012-05-11
相关资源
最近更新 更多