循环GroupBy并将密钥保存在新列表中

时间:2014-11-26 16:14:45

标签: c# asp.net

我想在groupByList<CourseEvent>并将密钥保存到另一个List<CourseVendor>

class CourseEvent

public class CourseEvent : ICourseEvent
{
    // other properties
    public string Vendor { get; set; }
}

class courseVendor

public class CourseVendor
{
    public string Name { get; set; }
}

我试图做的是:

// 1) get List<CourseEvent> items
List<CourseEvent> courseEvents = LoadCourseEvents();

// 2) group items by property "Vendor"
IEnumerable<IGrouping<string,CourseEvent>> groups = courseEvents.GroupBy(c => c.Vendor).ToList();

// 3) convert to list
List<CourseEvent> courseVendors = groups.SelectMany(group => group).ToList();

// 4) initiate target class
List<CourseVendor> vendors = new List<CourseVendor>(); 

// 5) fill target class
courseVendors.ForEach(c => vendors.Add(new CourseVendor { Name = c.Vendor }));

这会将密钥(供应商)字段保存到新的List<CourseVendor>,但由于第3行中的.SelectManyvendor字段courseEvents字段courseVendors字段1}}将被写入vendor。但我该如何纠正呢?每List<CourseVendor> vendors {{1}}只应出现一次{{1}}。

1 个答案:

答案 0 :(得分:4)

不需要执行步骤3到5.完成分组后,您只需使用:

var vendors = groups.Select(g => new CourseVendor { Name = g.Key }).ToList();

如果您不需要中间数据,您可以将它全部改为一行:

var vendors = 
    LoadCourseEvents()
        .GroupBy(c => c.Vender)
        .Select(g => new CourseVendor { Name = g.Key })
        .ToList();