2009-05-21 3 views
4

내 nhibernate detachedcriteria 객체에 대한 프로젝션 생성에 문제가 있습니다.NHibernate 프로젝션 도움말

나는 테이블 주소에 링크 된 클래스 스파를 가지고 있습니다.

주소에 문자열 인 City라는 필드가 있습니다.

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

제 궁극적 인 목표는 도시 이름의 고유 목록을 얻는 것입니다.

내가 별개의 도시로 모든 온천을 얻을 수 있다면 나도 행복 할 것이다.

내 모든 시도는 naught와 havent를위한 것이 었습니다. 도움이되는 게시물을 찾았습니다.

은 지금까지 나는 시도했다 :

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

는 또한 시도 : DetachedCriteria 쿼리 = DetachedCriteria.For () .CreateAlias ​​("주소", "A") .SetProjection (Projections.Distinct (Projections.Property를 ("도시"))); 오류가 발생했습니다 : 소스 배열의 적어도 하나의 요소를 대상 배열 유형으로 캐스트 할 수 없습니다. – CesarHerrera

답변

2

이 질문에 두 부분이있는 날 것으로 보인다.

1. 내 DetachedCriteria는 어떻게 생겼을 까?

다른 집계를 수행하지 않는 경우 GROUP BYDISTINCT과 동일한 결과를 제공해야합니다. 이것은 내가 사용할 쿼리입니다 :

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

2. Castle ActiveRecord로 어떻게 실행합니까?

나는 액티브을 사용한 적이 있지만, 메소드 서명을 기반으로,이 같은 작업을 기대 : 당신이 NHibernate에 세션에 액세스 할 수있는 경우

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

, 당신은 또한이 방법을 실행할 수 있습니다 :

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