【问题标题】:nhibernate queries SubQueryExpressionnhibernate 查询 SubQueryExpression
【发布时间】:2012-06-02 13:25:45
【问题描述】:

谁能解释一下什么是基于 NHibernate SubQueryExpression 的查询。非常欢迎任何带有具体示例的链接。

谢谢

更新: 假设我有一个名为 Beach 的实体。那个海滩可以有很多图像。我想选择海滩实体和它;来自图像集合的第一张图像。我想只携带那个选定的图像对象,或者如果我只选择第二个对象来只携带那个对象。

我不想像 Images.First() 这样访问,因为这将初始化所有集合,如果您需要更多信息,请询问。

【问题讨论】:

    标签: nhibernate subquery


    【解决方案1】:
    var query = session.QueryOver(() => vehicleAlias)
                .Left.JoinAlias(() => vehicleAlias.VehicleRegistrations, () => vehicleRegistrationAlias)
                .WithSubquery.WhereProperty(() => vehicleRegistrationAlias.RegistrationExpiryDate).Eq(
                    QueryOver.Of(() => vehicleRegistrationAlias2)
                        .Where(() => vehicleRegistrationAlias2.Vehicle.Id == vehicleAlias.Id)
                        .Select(Projections.Max<VehicleRegistration>(ps => ps.RegistrationExpiryDate)));
            query.Left.JoinAlias(() => vehicleRegistrationAlias.VehicleRegistrants, () => vehicleRegistrantAlias)
                .Where(() => vehicleRegistrantAlias.Client.Id == clientId);
    

    这是我刚刚为我的工作写的一个子查询,我花了一些时间来写。我真的不知道您具体要问什么,但这里有一个示例。如果您对此有任何疑问,请告诉我。

    .Select(Projections.Max(ps => ps.RegistrationExpiryDate))) 这一行完成了子查询中的所有工作。它选择最近的车辆登记。车辆登记别名 2 是作为子查询查询的对象。

    因此,这只会撤回车辆的当前车辆登记。一辆车可能有许多车辆登记。它的 .Select 语句可以修改为 .OrderById.Desc.SelectTop(1) 之类的东西。

    我希望这个编辑有所帮助。

    【讨论】:

    • 您能否建议我使用与我更新的问题相关的子查询的解决方案。另外,如果我没有要求太多评论您的查询。
    • 编辑了回复。看看对你有没有帮助。
    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多