2011-03-30 4 views
2

에 가입 :기준 API와 왼쪽 내가 다음과 같은 클래스가 사전 /지도

public class Item 
{ 
    public int Id { get; set; } 
    public IDictionary<int, ItemLocal> { get; protected set; } 
    public ICollection<string> Tags { get; set; } 
    public int DefaultLanguageId { get; set; } 
    public DateTime Start { get; set; } 
} 

public class ItemLocal 
{ 
    public virtual Item Parent { get; set; } 
    public virtual int LanguageId { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
} 

테이블 항목, ItemTag 및 ItemLocal에이지도를. 내가 기준 API를 통해 다음과 같은 쿼리를 만들고 싶어 :

select 
    i.Id, 
    i.Start, 
    l.Title 
from 
    Item i 
    left join ItemLocal l on i.Id = l.ParentId and i.DefaultLangaugeId = l.LanguageId 
order by 
    l.Title, 
    i.Id 

을하지만 왼쪽을 수행 NHibernate에 기준 API를 결합하는 방법을 잘 모릅니다. 특히 기본 언어 선택을 사용하는 경우.

도움이 매우 감사합니다.

답변

3

가 나는 해결책을 발견 :

Session 
    .CreateCriteria<Item>("i") 
    .CreateCriteria("Localization", "l", NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
     .Add(Restrictions.Disjunction() 
     .Add(Restrictions.EqProperty("i.DefaultLanguageId", "l.LanguageId")) 
     .Add(Restrictions.IsNull("l.LanguageId")) 
    ) 
    .AddOrder(Order.Asc("l.Title")) 
    .AddOrder(Order.Asc("w.Id")); 

이 작동하는 것 같다하지만 해결 방법과 쿼리의 결과를 WHERE 절. disjunction에 정의 된 제한 사항이 OUTER LEFT JOIN ... ON ... 문에 포함될 수있는 SQL 쿼리를 렌더링 할 수 있다는 것을 알 수 있습니다.

관련 문제