C# 按子属性进行LINQ分组

C# 按子属性进行LINQ分组,c#,linq,entity-framework,grouping,C#,Linq,Entity Framework,Grouping,我使用的是GroupByMany扩展方法,如下所示: 这是伟大的工作,除了我试图组的基础上的实体属性列表 例如,具有一组属性的Car类: public class Car { private string Model {get; set;} private int Year {get; set;} private List<CarProperty> Properties { get; set; } }

我使用的是GroupByMany扩展方法,如下所示:

这是伟大的工作,除了我试图组的基础上的实体属性列表

例如,具有一组属性的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; }
    }
我可以很容易地创建分组选择器,按“年份”或“型号”分组:

c => c.Model;
c => c.Year;
问题是我正在尝试为其中一个属性创建一个组选择器。 我尝试过(按汽车颜色分组):

但是创建一个复合分组密钥是非常困难的。我需要将可能的分组值列表展平,以给出:

Red: Car1, Car3
Blue: Car1, Car2
Black: Car3
Yellow: Car4
编辑:

如果GroupByMany不是一个好办法,我希望你能给我一些建议,比如{“年”、“型号”、“颜色”}这样的分组列表可以按照与分组列表相同的顺序对汽车进行多级分组

Year
  --> Model
    --> Colour

看来我把事情弄得太复杂了。这个答案帮助我找到了一个解决方案:


我不太确定您遇到了什么问题。也许您只需要在
选择()
之后添加
.Single()
?嗨,我编辑了我的问题,因为我忘了提到多个属性可以具有相同的名称,因此Single()会导致异常。那么,按颜色分组时,您希望发生什么情况?我希望分组键为红色、蓝色、黄色、黑色,etc和每个组将包含任何具有名为“颜色”的属性且该键值为颜色值的汽车。我会有一些车属于一个以上的群体,这是我想要的。可能是重复的
Red: Car1, Car3
Blue: Car1, Car2
Black: Car3
Yellow: Car4
Year
  --> Model
    --> Colour