按列第一列分组,按第二列分组,然后在EnumerableRowCollection上对第二列进行计数

时间:2012-09-21 09:03:58

标签: c# linq count group-by

我在C#.Net中有一个EnumerableRowCollection,有两列。我想分组第一列,然后是第二列,然后计算第二列。

我的EnumerableRowCollection基于DataGable上的DataTable:

Data Grid View

如果这是一个MySQL表,我会实现我想要的那样:

SELECT `Product Name`, 
       `Upsell Price`, 
       Count(`Upsell Price`) 
  FROM `tblWhatever` 
  GROUP BY `Product Name`, `Upsell Price`;

我在LINQ中需要这个等价物

我已经以编程方式构建了DataTable:

DataTable myDataTable = new DataTabl();
DataColumn myColumn = new DataColumn("My Column");
myDataTable.Columns.Add(myDataTable);
myDataTable.Rows.Add(new object[] { "whatever" });
myDataGridView.DataSource = myDataTable;

我找到了Daniel Schaffer的答案here,这帮助了我的小组,但我被困在计数中,如下所示:

var queryableData = myDataTable.AsEnumerable();
var result = from row in queryableData
          group row by new { ProductName = row["Product Name"], 
                             ProductPrice = row["Product Price"] };

如何编辑我的LINQ查询以允许我按第一列分组,然后按第二列分组,然后计算第二列?

1 个答案:

答案 0 :(得分:1)

试试这个:

var result = from row in queryableData
          group row by new { ProductName = row["Product Name"], 
                             ProductPrice = row["Product Price"] } into grp
          select new { grp.Key.ProductName , 
                       grp.Key.ProductPrice, 
                       Count = grp.Count()  };