【问题标题】:Adding projections to an nhibernate query将投影添加到休眠查询
【发布时间】:2009-07-10 16:51:37
【问题描述】:

将投影添加到可能已经或可能没有 1 个或多个投影集的休眠查询的最佳方法是什么?调用 .SetProjection() 似乎可以替换任何可能已经存在的投影。

为了提供一些背景上下文,我正在使用 here 找到的分页结果扩展方法的一个版本,并且我已经到了一个点,我已经在传递具有不同投影的查询,但是该投影被剥离为调用 .SetProjection(Projections.RowCountInt64) 的计数条件。

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    我不确定它是否会起作用,因为我现在无法检查它,但你为什么不使用ProjectionList 之类的东西来做这个技巧?

    
    var criteria = ...
    var projectionList = Projection.ProjectionList();
    
    // Add you projections to the projectionList
    projectionList.Add(yourQueryProjection);
    projectionList.Add(Projections.RowCountInt64());
    
    criteria.setProjection(projectionList);
    
    

    【讨论】:

    • 值得注意的是,一旦您选择使用投影,您必须指定您希望查询返回的每一列。我在 NH 方面的经验是有限的,但到目前为止,似乎还没有一种方法可以告诉 ICriteria API 您要选择与您选择的实体关联的所有列,然后再向查询中添加一个额外的投影。 . 但是这似乎不是一个很难添加到项目(或 ICriteria API)的扩展方法
    【解决方案2】:

    我还没有这样做,因此您可能需要对其进行一些修改,但我相信您可以做类似的事情

    .ProjectionCriteria.Add(Projections.RowCountInt64)
    

    由于它可能没有设置任何投影,因此您可能需要检查 ProjectionCriteria 属性在这种情况下是什么。它可能为空。

    【讨论】:

    • 我使用的是 ICriteria,所以我实际上没有可用的 .ProjectionCriteria。我想我可以传入一个实际的标准实现,但是我需要为每个 ICreiteria 实现提供一个扩展方法。还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多