2012-07-17 7 views
0

TABLEAU DES TÂCHES:groupe NHibernate par commande par

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

CESSIONNAIRE TABLE:

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

Mon jqGrid Table est comme ceci:

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

Je veux trier la colonne Status donc je l'ai fait:

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

cependant, cela renvoie une erreur, car l'état est sur la table Cessionnaire, pas dans le tableau des tâches. En outre, comment puis-je utiliser GROUP BY dans mon code parce que je pense qu'il va provoquer une erreur une fois que j'essaie de trier Status. il ne saura pas lequel mettre en premier, le NotAvailable de Ryan ou le NOt Disponible de Lisa ... s'il vous plaît aider ...

Répondre

0

Tout d'abord vous devez rendre NH conscient de l'association entre la tâche et l'assigné. Alors pourquoi avez-vous besoin d'un groupBy

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

si vous avez besoin que ces 3 propriétés

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

ou si vous voulez l'ensemble des objets de la tâche et le cessionnaire sont retournés

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