繁体   English   中英

LINQ按子属性分组

[英]LINQ grouping by child properties

我使用的是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”,“ Colour”}这样的分组列表,这些分组将以与汽车相同的顺序进行多级分组组列表。

Year
  --> Model
    --> Colour

看来我使整个事情变得比必要的更为复杂。 这个答案帮助我找到了解决方案:

LINQ:基于子列表中的属性分组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM