我正在使用此处所示的GroupByMany扩展方法:
http://blogs.msdn.com/b/mitsu/archive/2007/12/22/playing-with-linq-grouping-groupbymany.aspx
这很有效,除了我尝试根据实体属性列表进行分组。
这方面的一个例子是具有一组属性的Car类:
public class Car
{
private string Model {get; set;}
private int Year {get; set;}
private List<CarProperty> Properties { get; set; }
}
public class CarProperty
{
private string Name { get; set; }
private string Value { get; set; }
}
如果我有一个Car对象列表和相应的属性。主要问题是该类可以包含多个具有相同名称的属性:
Car1 : {"Colour", "Red"}, {"Colour", "Blue"}
Car2 : {"Colour", "Blue"}
Car3 : {"Colour", "Black"}, {"Colour", "Red"}
Car4 : {"Colour", "Yellow"}
我可以非常轻松地创建组选择器以按“年份”或“模型”进行分组:
c => c.Model;
c => c.Year;
问题是我正在尝试为其中一个属性创建一个组选择器。 我试过这个(按汽车颜色分组):
c => c.Properties.Where(p => p.Name == "Colour").Select(p => p.Value));
但它创建了一个复合分组键。我不知何故需要将可能的分组值列表展平为:
Red: Car1, Car3
Blue: Car1, Car2
Black: Car3
Yellow: Car4
编辑:
如果GroupByMany不是可行的方式,我会很感激任何建议,如{{Year“,”Model“,”Color“}这样的分组列表,它将对汽车进行多级分组。与组列表相同的顺序。
Year
--> Model
--> Colour