【问题标题】:Convert SQL with "HAVING" clause to LLBLGen Pro DynamicQuery将带有“HAVING”子句的 SQL 转换为 LLBLGen Pro DynamicQuery
【发布时间】:2013-11-21 21:41:27
【问题描述】:

我在将有点简单的查询转换为 LLBLGen Pro 动态查询时遇到了问题。我需要转换类似于以下 SQL 的内容(但我将传递区域的值、要检查的 id 和所需的名称):

SELECT  Parent.Id
FROM    Parent INNER JOIN Child
ON      Child.ParentId = Parent.Id
WHERE   Parent.Region = '1'
    AND Parent.Id IN (1, 2, 3, 4, 5)
GROUP BY
        Parent.Id
HAVING  SUM(CASE WHEN child.Name IN ('Required1', 'Required2', 'Required3') THEN 1 ELSE 0 END) != 3

但是,我很难将 Have 子句转换为等效的 LLBL。

这是我目前所拥有的:

var q = qf.Create()
          .From(qf.ParentView
            .InnerJoin(qf.ChildView)
                .On(ChildViewFields.Id == ParentViewFields.ParentId))
          .Where((ParentViewFields.Region == _region)
            .And(ParentViewFields.Id.In(_checkIds)))
          .Select(() => ParentViewFields.Id.ToValue<string>())                      
          .GroupBy(ParentViewFields.Id)
          .Having( ??? )

任何帮助将不胜感激。对于如何完成 SQL 所做的事情,我愿意接受其他建议(注意它必须在数据库中运行,而不是为了进一步计算而关闭客户端)。

【问题讨论】:

  • 只需使用另一个Where 子句。
  • 你能扩展一下吗?一开始我不是一个 SQL 人。

标签: c# llblgenpro


【解决方案1】:

类似:

Functions.IIF(ChildViewFields.Name.In("Required1", "Required2", "Required3"), 1, 0).Sum().NotEqual(3)

(所以把它放在 Have 调用中)

请下次在我们的支持论坛上发帖,以便我们可以立即回答问题,因为我们不会定期监控 stackoverflow。

【讨论】:

  • 不幸的是,我收到一个带有“内部错误”消息的 ORMQueryConstructionException。没有其他调试信息。
  • 感谢弗兰斯的帮助。还想指出,我遇到的错误确实是 LLBL 源代码中的错误,但您和您的团队很快修复了它,并且正在发布修复版本。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2011-04-15
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多