2012-03-08 76 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; } 
} 

,並承擔老師有同樣的事情,姓名和學生安排的名單。

我要選擇,從日程安排,對於特定的老師所有學生的名字的列表。我可以根據條件和所有內容編寫查詢,但無法僅選擇學生姓名。

這裏是我當前的查詢:

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,探查顯示如右圖一個正在生成的查詢,右對右表中的連接,只是,它選擇所有所有列表。

我似乎無法得到select的權利,我只需要student.Name而已。

如何寫這個嗎?我已經在這一個多小時嘗試不同的東西,但它始終是選擇錯誤了,說NHibernate.QueryException: could not resolve property和studentName無法識別。

謝謝。

回答

3

如果你只是想要一個字符串列表,你不應該需要使用WithAliasWithAlias用於將該列投影到結果對象上的成員中。

像這樣的東西應該工作:

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 2012-03-08 15:37:03

+0

另外,請問我現在該如何訂購這位''studentAlias.Name''? – LocustHorde 2012-03-08 15:37:20

+0

我希望我可以多次投票。 – LocustHorde 2012-03-08 15:37:31

相關問題