2010-04-14 3 views
0

Session.CreateCriteria()에서 반환 할 열을 선택할 수 있습니까?NHibernate 질의 CreateCriteria

egz :

var x = session.CreateCriteria(); 
    x.CreateAlias("EmployeePosition", "employeePosition"); 
    x.Add(Restrictions.Eq("employeePosition.Name", "Developer")); 

전체 행을 다운로드 피하기 위해 "성을 선택합니다"와 같은 무언가를 추가하는 방법이있다.

답변

3

필요한 속성 만 가진 클래스를 만드십시오. 종종이 클래스는 {Id, Label}과 같은 요약 클래스이며 간단한 유형이 필요한 곳 ​​어디에서나 재사용 할 수 있습니다 (예 : 목록). ProjectionList를 사용하여 반환 할 열을 정의하십시오. 그런 다음 Transformers.AliasToBean을 사용하여 결과를 간단한 유형으로 변환하십시오.

1

저는 Linq에게 NHibernate를 시도해 볼 것을 제안합니다. 그것은 당신이 당신이 아주 자연스러운 방법으로 묻고있는 것을 해줄 것입니다.

+1

문제는 너무 많은 버그가있어서 특정 상황에서 유용하지 않습니다. 나는 그들이 NH 3에 그것을 개선 할 것이기를 바란다. – Jacob

+0

흠. 우리는 어려움없이 상당히 큰 프로젝트에서이 도구를 사용하고있었습니다. 우리가 너무 많은 복잡한 조인을 다루지 않았으므로 충분히 밀어 붙이지 않았을 것입니다. –

2

당신이 사용 계획을 수행 할 수 있습니다

IList<Object[]> list = session.CreateCriteria(typeof(Employee)) 
    .SetProjection(Projections.ProjectionList() 
    .Add(Projections.Property("FirstName")) 
    .Add(Projections.Property("LastName")) 
).List<Object[]>(); 

    foreach(Object[] person in list) 
    { 
    String firstName = person[0]; 
    String lastName = person[1]; 
    } 

체크 아웃 다른 계획에 대한 NHibernate.Expressions 네임 스페이스를뿐만 아니라.

0

dana's 답변에 추가하려면 실제 수업을 읽고 싶으면 Transformers.AliasToBean을 투영과 함께 사용할 수 있습니다. 그런 다음 NHibernate는 일치하는 필드 이름의 값으로 객체의 속성을 채 웁니다.