【发布时间】:2015-06-15 09:36:43
【问题描述】:
我有一个data = IEnumerable<AnalyticsData> 的集合,我正在尝试按多个属性和Sum() 在一个整数列上进行分组。最终结果将是AnalyticsReportRow<dynamic>() 的集合,如下所示,尽管这并不高度相关。
在最终的Select() 方法中,我想传入一个对象,最好是从原始集合中传入,并且如果可能的话,我不希望在我的链式查询中间重新创建一个。大多数示例看起来像是创建一个新的强类型或动态对象以传递到链中的下一个链接。
这是我花了几个小时尝试使用的内容,这将返回下面第一个代码块中的集合以及所有行(我导出为 CSV,因此是格式):
var pageViewsData = analyticsData.GroupBy(data => new { g1 = data.Webproperty, pv = data.PageViews, d = data })
.GroupBy(data => new { gg1 = data.Key.g1, dd = data.Key.d })
.Select(data => new AnalyticsReportRow<dynamic>(data.Key.dd, "Page_Views", data.Sum(datas => datas.Key.pv)));
结果是这样的:
"CustomerA","","","","","Page_Views",0,"A1-810","","",2,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"A1-810","","",2,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-N8013","","",2,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-P3113","","",7,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-P3113","","",2,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-P3113","","",3,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-P3113","","",3,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-P3113","","",2,"4/10/2015 16:08:33"
并希望在倒数第二列中以 Sum() 结束,按客户分组,然后按设备分组。例如:
"CustomerA","","","","","Page_Views",0,"A1-810","","",4,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-N8013","","",2,"4/10/2015 16:08:33"
"CustomerA","","","","","Page_Views",0,"GT-P3113","","",16,"4/10/2015 16:08:33"
我很难理解逻辑,并且真的可以使用一个示例来说明如何像这样进行分组,甚至是伪代码和动态类型。
谢谢。
【问题讨论】:
标签: c# .net linq collections lambda