Having() 加入的 id 计数 table

Having() count of id's on joined table

我正在尝试在 OrmLite 中进行此查询:

select b.* from blog b
join blog_to_blog_category btbc on b.id = btbc.blog_id
join blog_category bc on btbc.blog_category_id = bc.id
where b.url like '%.com' and bc.id in (100, 583)
group by b.id
having count(distinct bc.id ) = 1

我不知道如何构造 Having() 方法。我可以看到有一个 Sql.CountDistinct() 方法,但我不知道如何将它与 Having() 一起使用。

我认为我需要按照以下方式做一些事情:

var q = db
.From<Blog>()
.LeftJoin<BlogToBlogCategory>()
.Join<BlogToBlogCategory, BlogCategory>()
.Where<BlogCategory>(x => Sql.In(x.Id, 100, 583))
.GroupBy<Blog>(bc => bc.Id)
.Having(x => Sql.CountDistinct("blog_category.id") == "2")

这给出了错误:

42883: operator does not exist: bigint = text

我看不出如何输入它来获取 table 列名称和 return 数字进行比较。

这个查询可以吗?

编辑

我通过显式设置 having expression 来解决这个问题

q.HavingExpression = $"having count(distinct {q.Table<BlogCategory>()}.{q.Column<BlogCategory>(bc => bc.Id)}) = 2";

我仍然很好奇是否有可能用流利的方式做到这一点api。

我刚刚在最新的 v5.11.1 中为 Having() 添加了多个类型的 table 重载,现在是 available on MyGet,这将允许您引用连接的 table类型表达式中的属性,例如:

var q = db
    .From<Blog>()
    .LeftJoin<BlogToBlogCategory>()
    .Join<BlogToBlogCategory, BlogCategory>()
    .Where<BlogCategory>(x => Sql.In(x.Id, 100, 583))
    .GroupBy<Blog>(bc => bc.Id)
    .Having<BlogCategory>(x => Sql.CountDistinct(x.Id) == 2)