【问题标题】:LINQ grouping by child propertiesLINQ 按子属性分组
【发布时间】:2014-10-12 23:27:50
【问题描述】:

我正在使用此处说明的 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

【问题讨论】:

  • 不太确定您在这里遇到了什么问题。也许您只需要在Select() 之后添加.Single()
  • 嗨,我编辑了我的问题,因为我忘了提到多个属性可以具有相同的名称,因此 Single() 会导致异常。
  • 那么当按颜色分组时你想发生什么?
  • 我希望组键为红色、蓝色、黄色、黑色等,并且每个组将包含任何具有名为“颜色”的属性的汽车,该键值作为颜色值。我想要一些属于多个组的汽车。

标签: c# linq entity-framework grouping


【解决方案1】:

似乎我让整个事情变得比必要的复杂。这个答案帮助我找到了解决方案:

LINQ: grouping based on property in sublist

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2014-01-02
    • 2013-07-28
    相关资源
    最近更新 更多