我想在groupBy
上List<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行中的.SelectMany
,vendor
字段courseEvents
字段courseVendors
字段1}}将被写入vendor
。但我该如何纠正呢?每List<CourseVendor> vendors
{{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();