2012-07-17 27 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();