C# 如何使用LINQ查询语法更优雅地编写以下代码?

C# 如何使用LINQ查询语法更优雅地编写以下代码?,c#,linq,C#,Linq,如何使用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();

如何使用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;
var mergedNotes=new List();
var notegroupsbyserid=notes.GroupBy(x=>x.UserID);
foreach(NoteGroupsBySerId中的var组)
{
var sortedNotesByOneUser=group.OrderBy(x=>x.CreatedOn.ToList();
var mergednotesforaserid=GetMergedNotesFor(sorteddnotesbyoneuser);
mergedNotes.AddRange(mergednotesforaserid);
}
返回合并注释;

我认为这样做很有效:

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;
var mergedNotes=new List();
mergedNotes.AddRange((从notes中的n开始)
orderby n.CreatedOn
按n.UserID将n分组到g中
设m=GetMergedNotesFor(g)
选择m),选择多个(m=>m);
返回合并注释;

不是LINQ语法,但至少更优雅

List<Note> mergedNotes =
    notes
    .GroupBy(x => x.UserID)
    .SelectMany(g => GetMergedNotesFor(g.OrderBy(x => x.CreatedOn)))
    .ToList();
列出合并注释=
笔记
.GroupBy(x=>x.UserID)
.SelectMany(g=>GetMergedNotesFor(g.OrderBy(x=>x.CreatedOn)))
.ToList();
使用我的测试数据,它会创建与原始代码相同的结果