nhibernate group by order by

时间:2012-07-17 03:23:20

标签: c# nhibernate fluent-nhibernate group-by sql-order-by

任务表:

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

ASSIGNEE TABLE:

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

我想对Status列进行排序,所以我这样做了:

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>();

但是,这会返回错误,因为Status位于Assignee表上,而不是Task表中。

此外,我如何在我的代码中使用GROUP BY因为我认为一旦我尝试对Status进行排序就会导致错误。它不会知道放哪个,瑞安的NotAvailable或Lisa的NOt ......请帮忙...

1 个答案:

答案 0 :(得分: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();