2012-03-08 17 views
2

私は3つの単純なテーブル 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が必要です。

どうすればいいですか?私はこれを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