gpt4 book ai didi

nhibernate - 如何从 NHibernate 中的子查询中获取值?`

转载 作者:行者123 更新时间:2023-12-04 01:17:18 26 4
gpt4 key购买 nike

我目前正在构建一个留言板,我需要在其中输出线程中的消息数。

  • 身份证
  • 姓名
  • 消息计数

在普通 SQL 中,它看起来像这样,但我找不到任何关于如何进行内联选择的文档。

SELECT 
t.ID,
t.Name
(SELECT COUNT(*) FROM Messages m WHERE m.ThreadID = t.ID)
FROM Threads t

我只找到了有关如何使用分离查询限制结果集的示例,而不是如何从中选择实际值的示例。

如何使用 NHibernate 进行内联选择?我更喜欢使用 ICriteria 而不是 HQL。

编辑:我简化了过于复杂的问题,使其更易于理解。

最佳答案

您可以使用投影来执行此操作。在 3.X 中使用 QueryOver API 看起来像这样(您的子查询会有所不同,但不会相差太远):

    var subquery = DetachedCriteria.For<ToppingUse> ("t")
.Add (Restrictions.EqProperty ("t.Pizza.Id", "p.Id"))
.SetProjection (Projections.Count ("Id"));

Pizza p = null;

var toppedPizzas = session.QueryOver<Pizza>(() => p)
.Select(Projections.Property(() => p.Id)
, Projections.Property(() => p.Sauce)
, Projections.Property(() => p.Crust)
, Projections.Alias(Projections.SubQuery(subquery), "ToppingCount"))
.List<object[]>(); //then you need to handle mapping on your own somehow (look into ResultTransformers if needed)

这转化为以下标准:

    var subquery = DetachedCriteria.For<ToppingUse> ("t")
.Add (Restrictions.EqProperty ("t.Pizza.Id", "p.Id"))
.SetProjection (Projections.Count ("Id"));

var toppedPizzas = session.CreateCriteria<Pizza>("p")
.SetProjection(Projections.Property("p.Id")
, Projections.Property("p.Sauce")
, Projections.Property("p.Crust")
, Projections.Alias(Projections.SubQuery(subquery), "ToppingCount"))
.List<object[]>();//then you need to handle mapping on your own somehow (look into ResultTransformers if needed)

您只需要确保在子查询和外部查询中使用相同的别名即可。

关于nhibernate - 如何从 NHibernate 中的子查询中获取值?`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com