2010-09-09 5 views
0

J'utilise framework d'entité pour connecter la base de données.Renvoyer toutes les lignes ayant une valeur maximale

J'ai une table (Appelons-le "fichier") qui plusieurs domaines nantis:

ID, Version, XYZ clé Primarky est basée sur ID et la version. donc je peux avoir plusieurs lignes avec le même ID mais une version différente (et inversement).

La question est:

Comment puis-je, avec une expression LAMBDA, demander à mon Entity Framework, pour me retourner toute dernière version d'un "fichier".

Exemple: Datas:

ID;Version;Other 
1;1;YX 
1;2;YZ 
2;1;AH 
2;2;BH 
2;5;CA 
1;3;AAA 

Résultat:

1;3;AAA 
2;5;CA 

Merci!

!! L'objectif est que la base de données n'a pas besoin de retourner toutes les lignes et qu'elle est appelée une seule fois, donc oubliez la solution comme GetAllRows et lisez toute la collection et n'enregistrez que la dernière, ou obtenez une liste de tous les ID possibles. version foreach dans une autre requête. Merci!

+0

Vous demandez explicitement une expression lambda, pourquoi? –

+0

Parce que tout le projet utilise ceci, mais c'est seulement un bonus;) – J4N

+0

Si la réponse que j'ai donnée était correcte, pourriez-vous la marquer comme réponse? –

Répondre

1

Vous pouvez utiliser la requête Les LinqToEntites suivante pour cela:

var result = from f in myEntities.Files 
      group f by f.ID into g 
      select g.OrderByDescending(f => f.Version).FirstOrDefault(); 

Il serait peut-être plus judicieux d'utiliser First au lieu de FirstOrDefault mais vous obtenez une UnsupportedException:

La méthode « First 'ne peut être utilisé que comme opération de requête finale. Envisagez d'utiliser la méthode 'FirstOrDefault' dans cette instance à la place.

+0

Génial, et j'obtiendrai l'ensemble de "l'entité" ou juste le "f.Id" qui était inclus dans la condition de groupe? – J4N

+0

Cette requête renvoie l'entité entière. La variable 'g' est en fait un' IEnumerable 'avec une propriété supplémentaire:' Key'. –

Questions connexes