2010-06-26 6 views
0

J'ai une table des commandes faites par des personnes:Classement. LINQ à la question sql

Orders 
{ 
    Guid PersonId, 
    int Priority, 
    Guid GoodId 
} 

priorité est un nombre entier. Par exemple:

AlenId 1 CarId 
DianaId 0 HouseId 
AlenId 3 FoodId 
DianaId 2 FlowerId 

Je veux récupérer plus des ordres de priorité pour chaque personne:

AlenId 1 CarId 
DianaId 0 HouseId 

Dans T-SQL, je vais utiliser le classement, comment puis-je obtenir le même résultat dans LINQ-2- Sql?

Merci d'avance!

Répondre

2

Quelque chose comme ceci:

var query = from order in context.Orders 
      orderby order.Priority 
      group order by order.PersonId into personOrders 
      select personOrders.First(); 

Je crois qui devrait fonctionner, mais je ne sais pas comment il est bien défini, en termes de post-regroupement de commandes. Cela permettrait également de travailler, même si elle est un peu plus laid:

var query = from order in context.Orders 
      group order by order.PersonId into personOrders 
      select personOrders.OrderBy(order => order.Priority).First(); 

Ou en utilisant la notation juste point:

var query = context.Orders 
        .GroupBy(order => order.PersonId) 
        .Select(group => group.OrderBy(order => order.Priority) 
             .First());