2012-03-08 42 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

相关问题