2012-03-08 3 views
2

나는 세 가지 간단한 테이블 nhibernate queryover 별칭 열을 선택하는 방법?

schedule 
{ 
    Student student { get; set;} 
    Teacher teacher { get; set;} 
    bool Deleted { get; set; } 
} 

Student 
{ 
    string Name { get; set; } 
    IList<schedule> TeacherMeetings {get; set; } 
} 

을 한 가정 교사를 가정하는 것은 같은 일을, 이름과 학생 일정의 목록이 있습니다.

일정에서 특정 선생님의 모든 학생 이름 목록을 선택하고 싶습니다. 조건과 모든 것에 대한 쿼리를 작성할 수 있지만 학생 이름 만 선택하는 데 어려움이 있습니다. 여기

내 현재 쿼리입니다 : 나는 모든 select을 주석 처리하면 바로 오른쪽 테이블에 조인과

DetachedCriteria dc = QueryOver.Of<Schedule>(() => sAlias) 
    .JoinAlias(() => sAlias.student,() => studentAlias) 
    .JoinAlias(() => sAlias.teacher,() => teacherAlias) 
    .Where(() => teacherAlias.MembershipGuid == teacherGuid) 
    .AndNot(() => sAlias.isDeleted) 
    //.Select(() => studentAlias.Name) 
    .SelectList(list => list 
     .SelectGroup(x => x.student.Name).WithAlias(() => studentAlias.Name)) 
    .DetachedCriteria 
    ; 

는, 프로파일 러, 올바른으로 생성되는 쿼리를 보여줍니다 만, 모든 모든 열을 선택 테이블.

나는 select이 맞지 않는 것 같습니다. 단지 student.Name 만 필요합니다.

어떻게 작성합니까? 나는 1 시간 이상 다른 일을 시도해 왔지만, 항상 오류가 발생하여 NHibernate.QueryException: could not resolve property이라고 말하면 그 studentName을 인식 할 수 없다.

감사합니다.

답변

3

문자열 목록 만 원하면 WithAlias을 사용할 필요가 없습니다. WithAlias은 해당 열을 결과 개체의 멤버로 투영하는 데 사용됩니다. 이 같은

뭔가 작업을해야합니다 :

DetachedCriteria dc = QueryOver.Of<Schedule>(() => sAlias) 
    .JoinAlias(() => sAlias.student,() => studentAlias) 
    .JoinAlias(() => sAlias.teacher,() => teacherAlias) 
    .Where(() => teacherAlias.MembershipGuid == teacherGuid) 
    .AndNot(() => sAlias.isDeleted) 
    .SelectList(list => list 
     .Select(() => studentAlias.Name)) 
    .DetachedCriteria; 

그래서 다음 당신에게 문자열 목록을 얻어야한다 :

IList<string> names = dc.GetExecutableCriteria(session) 
    .List<string>(); 

업데이트 (코멘트 당). 다음은 내림차순으로 학생 이름으로 주문하는 방법입니다.

DetachedCriteria dc = QueryOver.Of<Schedule>(() => sAlias) 
    .JoinAlias(() => sAlias.student,() => studentAlias) 
    .JoinAlias(() => sAlias.teacher,() => teacherAlias) 
    .Where(() => teacherAlias.MembershipGuid == teacherGuid) 
    .AndNot(() => sAlias.isDeleted) 
    .SelectList(list => list 
     .Select(() => studentAlias.Name)) 
    .OrderBy(() => studentAlias.Name).Desc() 
    .DetachedCriteria; 
+0

우수! 그거 .. .. 음 ..''withAlias''는 Transform에서만 사용 되나요? – LocustHorde

+0

도이 "studentAlias.Name"으로 어떻게 주문합니까? – LocustHorde

+0

나는 이것을 한 번 이상 투표 할 수 있으면 좋겠다. – LocustHorde

관련 문제