2009-05-06 3 views
4

Comment puis-je écrire le code suivant plus élégamment en utilisant la syntaxe de requête LINQ?Comment puis-je écrire le code suivant plus élégamment en utilisant la syntaxe de requête LINQ?

var mergedNotes = new List<Note>(); 

var noteGroupsByUserID = notes.GroupBy(x => x.UserID); 

foreach (var group in noteGroupsByUserID) 
{ 
    var sortedNotesByOneUser = group.OrderBy(x => x.CreatedOn).ToList(); 
    var mergedNotesForAUserID = GetMergedNotesFor(sortedNotesByOneUser); 
    mergedNotes.AddRange(mergedNotesForAUserID); 
} 

return mergedNotes; 

Répondre

5

pas la syntaxe LINQ, mais au moins plus élégant ...

List<Note> mergedNotes = 
    notes 
    .GroupBy(x => x.UserID) 
    .SelectMany(g => GetMergedNotesFor(g.OrderBy(x => x.CreatedOn))) 
    .ToList(); 

Avec mes données d'essai, il crée le même résultat que votre code original.

5

Je pense que cela fait l'affaire:

var mergedNotes = new List<Note>(); 
mergedNotes.AddRange((from n in notes 
         orderby n.CreatedOn 
         group n by n.UserID into g 
         let m = GetMergedNotesFor(g) 
         select m).SelectMany(m => m)); 
return mergedNotes; 
+0

Merci, la réponse choisie m'a semblé plus lisible. –

Questions connexes