NHibernate投影帮助

我在为我的nhibernate detachedcriteria对象创建投影时遇到问题.

我有一个与桌子地址相关联的课程.

地址有一个名为City的字段,它是一个字符串.

public class Spa : IAggregateRoot
{
       [BelongsTo("AddressID", Cascade = CascadeEnum.All)]
       public Address Address { get; set; }
}

我的最终目标是获得一个独特的城市名称列表.

如果我能得到所有不同城市的水疗中心,我也会很高兴.

我所有的尝试都是徒劳的,并没有找到任何有用的帖子.

到目前为止我已经尝试过:

DetachedCriteria query = DetachedCriteria.For<Spa>()
                         .CreateAlias("Address", "A")

query.SetProjection(
         Projections.Distinct(Projections.ProjectionList()
         .Add(Projections.Alias(Projections.Property("Address"), "A"))));

var Spas = ActiveRecordMediator<Spa>.FindAll(query);

我知道以上不正确,只是想找个地方开始.

任何帮助,将不胜感激.
此外,任何简单的投影教程将不胜感激,似乎无法找到任何直接的东西.

我也尝试过,但是遇到了投射错误,看着它:

DetachedCriteria query = DetachedCriteria.For<Spa>() 
.CreateAlias("Address", "A")
.SetProjection(Projections.Distinct(Projections.Property("A.City"))); 

最佳答案 在我看来,你的问题分为两部分.

1.我的DetachedCriteria应该是什么样的?

如果您没有执行任何其他聚合,GROUP BY应提供与DISTINCT相同的结果.这是我要使用的查询:

var query = DetachedCriteria.For<Spa>()
    .CreateAlias("Address", "A")
    .SetProjection(Projections.GroupProperty("A.City"));

2.如何使用Castle ActiveRecord执行它?

我从来没有使用过ActiveRecord,但基于方法签名,我希望这样的东西可以工作:

var cities = ActiveRecordMediator<string>.FindAll(query);

如果您有权访问NHibernate会话,您也可以这样执行:

var cities = query.GetExecutableCriteria(session).List<string>();
点赞