LINQ在子句中的分组依据和每组中的前N条记录

Raj*_*Raj 3 .net c# linq group-by

我有如下两节课。如果我有一个类Schedule的通用列表(如List),我将如何编写LINQ查询,这样我就可以获得该列表中SourceId匹配1,2,3 ... X和StartTime>一些日期时间的所有项目,然后我想要返回每个SourceId的前3个元素(即:按SourceId分组)

由于此列表将包含大量记录,因此我想编写最有效的LINQ查询

我也希望结果的最终形状为List的形式

public class Source
{
    public int SourceId { get; set; }
    public string Name { get; set; }
}

public class Schedule
{
    public int SourceId { get; set; }
    public Source Source { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Raj*_*Raj 5

经过数小时的谷歌搜索:

var result = r.ScheduleList.
             Where(s => sourceIdIntArray.Contains(s.SourceId) &&
                   s.StartTime >= new DateTime(2011, 09, 20)).
             GroupBy(s => s.SourceId).
             SelectMany(g => g.OrderBy(s => s.StartTime).
                             Take(3)).
             ToList();
Run Code Online (Sandbox Code Playgroud)