我在为我的nhibernate detachedcriteria对象创建投影时遇到问题。
我有一个与表格地址相关联的类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")));
答案 0 :(得分:2)
在我看来,你的问题有两个部分。
如果您未执行任何其他聚合,GROUP BY
应提供与DISTINCT
相同的结果。这是我要使用的查询:
var query = DetachedCriteria.For<Spa>()
.CreateAlias("Address", "A")
.SetProjection(Projections.GroupProperty("A.City"));
我从未使用过ActiveRecord,但根据方法签名,我希望这样的东西可以工作:
var cities = ActiveRecordMediator<string>.FindAll(query);
如果您有权访问NHibernate会话,您也可以这样执行:
var cities = query.GetExecutableCriteria(session).List<string>();