我想我需要一种使用C#和Linq执行数据透视表或交叉表的方法,列数不确定 . 但是,我将添加一些开始细节以查看它的去向 .
<开始细节>
想象一下有两个字段的表:
string EventName;
Datetime WhenItHappend;
我们想生成一个报告,如下面的示例,我们按EventName进行分组,然后有一系列列来计算某些日期和时间帧数 . 困难显然是可变数量的列 .
SportJan 2010Jan 2009Feb 2010Feb 2009
Basketball26182316
Hockey28192518
Swimming52454843
客户可以为报告创建任意数量的命名事件计数器 . 功能始终相同:“名称”,“开始”,“结束” .
Any way to assemble this as a single linq IQueryable result in C#?
<结束开始细节>
就SQL而言,我尝试创建一个日期范围表{TimeFrameName,begin,end}并将其连接到上面的表,其中begin <= whenItHappened和whenItHappened <= end,这产生了一组很好的{EventName,TimeFrameName}然后做了一个计数(*),但仍然留下了如何转换数据,使行成为列 .
1 回答
你有一个类/ SQL行
并且您希望按EventName和WhenItHappened.Month进行分组
现在你基本上有一个2维的集合数组 . 您可以在Month / EventName上迭代这些,以获取每个集合中项目的计数,这是您要在表格中显示的内容 .
GroupBy运算符返回一组组,其中每个组包含一个Key以及与指定Key匹配的原始列表的子集 . 如果指定2维键,则可以将结果视为2维集合数组 .
GroupBy是一个非常强大的运营商!