2017-08-23 3 views
0

J'essaie d'utiliser cette ligne:Comment utiliser Max et Grouper par dans LINQ

return ObjectContext.TH_Proposal.GroupBy.where(/* condition*/).(y => y.ProposalID).Max(y =>y.ProposalDate); 

Je veux un tel résultat en utilisant LINQ

select * 
from TH_Proposal 
where ProposalDate in (select max(ProposalDate)from TH_Proposal group by ProposalID) 

Répondre

1

Vous pouvez le faire comme ceci:

ObjectContext.TH_Proposal.GroupBy(
        p => p.ProposalID, 
        (id, g) => g.OrderByDescending(p => p.ProposalDate).First()); 

Ceci regroupe les entrées par ProposalID et sélectionne celui avec le ProposalDate le plus élevé.

0

Ceci est beaucoup plus facile à Linq que SQL depuis Linq peut prendre le premier élément de chaque groupe:

return 
    ObjectContext.TH_Proposal 
       .OrderBy(y => y.ProposalDate) 
       .GroupBy(y => y.ProposalID) 
       .Select(g => g.First()); 
+1

Je suppose que cela peut fonctionner plus rapidement que ma solution (commande à la fois), mais je ne suis jamais bien sûr si 'GroupBy' conserve l'ordre des éléments ... peut dépendre du fournisseur dbms/query etc ... –

+0

@ RenéVogt Bon point. Je sais que l'ordre est préservé dans Linq-to-objects, pas certain s'il est dans Linq-to-entities. –