2009-05-06 6 views
4

Wie kann ich den folgenden Code mit der LINQ-Abfragesyntax eleganter schreiben?Wie kann ich den folgenden Code mit der LINQ-Abfragesyntax eleganter schreiben?

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; 

Antwort

5

Nicht LINQ-Syntax, aber zumindest elegante ...

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

Mit meinen Testdaten erzeugt es das gleiche Ergebnis wie Dein ursprünglicher Code.

5

Ich denke, das funktioniert den Trick:

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

Danke, die ausgewählte Antwort schien mir lesbarer. –

Verwandte Themen