4

我在为我的休眠分离条件对象创建投影时遇到问题。

我有一个与表地址链接的 Spa 类。

地址有一个名为 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"))); 
4

1 回答 1

2

在我看来,你的问题有两个部分。

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>();
于 2011-05-07T01:58:24.527 回答