与LINQ集团

Vee*_*ech 0 c# linq

我有以下数据:

CourseID Month  
100      Jan  
100      Feb  
101      Jan  
102      May  
102      Jun  
102      July  

我想写一个LINQ查询来返回如下数据(包括逗号):

CourseID  Months
100       Jan, Feb   
101       Jan  
102       May, Jun, July  

我该怎么做呢?

Mik*_*tly 7

试试这个:

courses.GroupBy(c => c.CourseID)
    .Select(g => new 
    {
        Id = g.Key, 
        Months = String.Join(", ", g.Select(c => c.Month).ToArray()) 
    });
Run Code Online (Sandbox Code Playgroud)

如果您使用的是.NET 4.0,则不需要ToArray调用,因为String.Join有一个新的重载来获取IEnumerable.

解释这是如何工作的:

首先,您按CourseID对课程组进行分组.这将返回一个IEnumerable<IGrouping<int, Course>>- 枚举中的每个元素都包含一个名为Key的属性 - 这是分组到其中的所有课程的CourseID.

这个位是关键:IGrouping也是一个IEnumerable<Course>- 这意味着它可以通过返回在Key中保存的ID下分组的每个元素进行迭代.

最后一部分是选择一个具有两个属性Id和Months的新匿名类型:

  • Id设置为Key(CourseID)
  • Months设置为将分组课程的所有Month值连接在一起的结果.这是使用String.Join完成的,因为它可以轻松指定值的分隔符.