c# - LINQ 按子属性分组

标签 c# linq entity-framework grouping

我正在使用此处所示的 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: grouping based on property in sublist

关于c# - LINQ 按子属性分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26331064/

相关文章:

c# - 在组框窗口窗体内使用LINQ进行复选框验证

c# - 重构 Linq 查询

c# - 如何回溯函数调用?

linq - 在 VB.NET 中使用 Linq 展平分层数据

c# - 将多个 Include() 与嵌套 Select() 结合使用时出现 EntityCommandExecutionException

c# - 在大型 wpf 数据网格中移动/隐藏列的性能问题

c# - 以匿名类作为数据源的 BindingSource 列

c# - 如何使用 Entity Framework (Core) 解决每组最大 n 问题?

c# - DbContext继承更新-数据库错误

c# - .NET Core Entity Framework - 为类库中的 Context 添加迁移