2012-07-17 53 views
0

任務表:NHibernate的GROUP BY爲了通過

id AssigneeID Name 
1 2  TODO1 
2 3  TODO2 
3 1  TODO3 

ASSIGNEE表:

id Name Status 
1 Max Available 
2 Ryan NotAvailable 
3 Lisa NotAvailable 

的jqGrid表是這樣的:

Name Assignee Status 
TODO1 Ryan  NotAvailable 
TODO2 Lisa  NotAvailable 
TODO3 Max  Available 

我想狀態列進行排序,所以我這樣做:

var query = scope.Session.QueryOver<Task>().Where(s=>s.Id!=null); 

var x = query.Select(Projections.Distinct(Projections.Property<Task>(task => task.AssigneeID))).AddSortExpression("Status desc").List<Assignee>(); 

但是,這是因爲狀態是在受讓人表,而不是在工作表中返回一個錯誤。此外,如何在我的代碼中使用GROUP BY,因爲我認爲一旦嘗試對狀態進行排序,就會導致錯誤。它不會知道先放哪個,Ryan的NotAvailable或Lisa的NOt ...請幫助...

回答

0

首先,您需要讓NH知道任務和受讓人之間的關聯。那你爲什麼需要一個GROUPBY

class Task 
{ 
    public virtual Assignee Assignee { get; set; } 
} 

,如果你只需要這3個屬性

SomeDto dto = null; 
Assignee assignee = null; 
session.QueryOver<Task>() 
    .JoinAlias(task => task.Assignee,() => assignee) 
    .OrderBy(() => assignee.Status) 
    .SelectList(list => list 
     .Select(task => task.Name).WithAlias(() => dto.Name) 
     .Select(() => assignee.Name).WithAlias(() => dto.Assignee) 
     .Select(task => assignee.Status).WithAlias(() => dto.Status)) 
    .TransformUsing(Transformers.AliasToBean<SomeDto>()) 
    .List<SomeDto>() 

,或者如果你想整個任務和受讓人對象返回

Assignee assignee = null; 
var tasks = session.QueryOver<Task>() 
    .JoinAlias(task => task.Assignee,() => assignee) 
    .OrderBy(() => assignee.Status) 
    .List();