Mon exemple particulier est assez complexe mais je pense que le concept s'appliquerait également à quelque chose comme un système de journalisation, donc je vais l'utiliser à la place pour faciliter l'explication. Il est un exemple fictivement, s'il vous plaît ne pas harpe ou agoniser sur ce qui est achitectually, ou moralement répréhensible programatically l'exemple lui-même :)LINQ: Sélectionnez IEnumerable avec Distinct/GroupBy et le tri - possible?
Supposons que vous avez ceci:
class LogEntry
{
int ID;
int UserName;
datetime TimeStamp;
string Details;
}
et vous avez tiré un ensemble des données comme ceci:
ID Username Timestamp Details
1 foo 1/01/2010 Account created
2 zip 2/02/2010 Account created
3 bar 2/02/2010 Account created
4 sandwich 3/03/2010 Account created
5 bar 5/05/2010 Stole food
6 foo 5/05/2010 Can't find food
7 sandwich 8/08/2010 Donated food
8 sandwich 9/09/2010 Ate more food
9 foo 9/09/2010 Ate food
10 bar 11/11/2010 Can't find food
ce que je veux faire est de sélectionner uniquement le dernier enregistrement unique (c.-à-Trier par TimeStamp décroissant) pour chaque utilisateur (c.-à-GroupBy Nom d'utilisateur). Je peux me concentrer sur Distinct, et dans une moindre mesure sur GroupBy, mais en combinant tous ces éléments dans une seule instruction qui renvoie aussi les champs/propriétés non-distincts/groupés ET trie par horodatage, cela me donne mal à la tête.
Ce qui devrait sortir avec l'exemple ci-dessus est:
ID Username Timestamp Details
2 zip 2/02/2010 Account created
8 sandwich 9/09/2010 Ate more food
9 foo 9/09/2010 Ate food
10 bar 11/11/2010 Can't find food
Je ne veux pas « tricher » et de recourir à un moyen de longue haleine de le faire lorsque la performance est pas critique ici et je suis modérément confiant que cela peut être fait dans une seule déclaration LINQ.
Comment voulez-vous que le tri final soit? – Will