【问题标题】:nhibernate group by order by按顺序休眠组
【发布时间】:2012-07-17 03:23:20
【问题描述】:

任务表:

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

受让人表:

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

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

此外,我如何在我的代码中使用 GROUP BY,因为我认为一旦我尝试对状态进行排序,它会导致错误。它不知道先放哪个,Ryan 的 NotAvailable 或 Lisa 的 NOT Available...请帮助...

【问题讨论】:

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


    【解决方案1】:

    首先,您需要让 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2016-12-28
      • 2012-09-08
      相关资源
      最近更新 更多