如何访问由LINQ GroupBy塑造的组的内容?

时间:2017-02-24 10:39:46

标签: c# linq group-by

我有 Customers 的集合,可能根据他们的偏好进行分组( oranges,apples

CustomerID | Preference  | Age
    1           oranges    35
    2           apples     32
   ...            ...      ...
   100          oranges    48

我需要一些摘要表,所以可以将 Customers 分组到这样的新集合中:

var GroupedCustomers = Customers
    .GroupBy (a => new {a.Preference, ...}) //could be grouped by more complex compound key
    .Select (a => new { CustomerPreference = a.Key.Prefence, TotalOrders = a.Count () })

如何使用其成员的所有原始属性(例如"年龄"每个客户)访问每个组的内部集合?例如,我需要绑定"橙色爱好者的列表"到GridView并计算他们的平均年龄。

实际案例中的问题是一个复杂的复合键和数百个组,所以我不想每次都从原始集合中枚举它们。

2 个答案:

答案 0 :(得分:1)

您需要将未组合的集合绑定到GridView,然后您可以应用过滤器,保持View和ViewModel synchronized

按照How to: Group, Sort, and Filter Data in the DataGrid Control

下的文档示例进行操作

评论

  

绑定只是subcase。我想找到一般方法。我想说吧   想要对许多属性进行一些数学处理   小组成员(如年龄)。你回答的意思是我申请的   GroupBy,所有未包含在组密钥中的属性   迷路了吗?

,他们不是。将分组项目的列表添加到组中,例如

var GroupedCustomers = Customers
    .GroupBy (c=> new {a.Preference, ...}, //could be grouped by more complex compound key 
              c => c,
              (key, g)  => new {
                  CustomerPreference = key.Preference,  
                  SubItems = g.ToList(), // <= this is your inner collection
                  ...})

答案 1 :(得分:0)

这是我自己的尝试。

我们应该限制GroupBy的初始声明,以保持集合不变:

var GroupedCustomers = Customers
.GroupBy (a => new {a.Preference, ...});

然后,内部集合将如下所示:

var GroupByIndex = GroupedCustomers[0]; //retrieve entire group by its index
var GroupdByContent = GroupedCustomers.First(i => i.Key.Preference == "oranges") //retrieve group by key