【发布时间】:2013-09-04 11:16:49
【问题描述】:
目前我的表格如下所示:
Id StockCompanyId StockIndexId FilterDatePeriodId Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20
6301 4 1 NULL NULL NULL NULL 0.14 0.14 0.14 0.14 NULL NULL NULL NULL 0.05 0.05 0.05 0.05 NULL NULL NULL NULL NULL NULL
6553 1 1 NULL NULL NULL NULL 0.53 0.53 0.53 0.53 0.58 0.58 0.58 0.58 0.55 0.55 0.55 0.55 0.50 0.50 0.50 0.50 0.43 0.43
6805 2 1 NULL NULL NULL NULL 0.00 0.00 0.00 0.00 0.05 0.05 0.05 0.05 0.08 0.08 0.08 0.08 0.06 0.06 0.06 0.06 0.07 0.07
7057 3 1 NULL NULL NULL NULL 0.11 0.11 0.11 0.11 0.13 0.13 0.13 0.13 0.17 0.17 0.17 0.17 0.17 0.17 0.17 0.17 0.17 0.17
7309 5 1 NULL NULL NULL NULL 0.16 0.16 0.16 0.16 -0.16 -0.16 -0.16 -0.16 0.19 0.19 0.19 0.19 -0.34 -0.34 -0.34 -0.34 0.00 0.00
列在设计上是静态的,我们始终不再保留 20Q 的财务数据,当新季度到来时,我们将所有数据从左向右移动,并将新值放入 Q0
我目前需要的是上面带有聚合函数的转置版本。
对于选定的公司组(StockCompanyId 的集合),并提供股票指数 (StockIndexId)计算每个季度的平均值,并从最新季度到最新季度呈现它。
所以最终的结果应该是这样的:
Quarter Aggregated Value
0 0.53 <-- Average(values for all matched companies and provided stock index)
1 0.71
2 0.81
3 ...
4 ...
5 ...
6 ...
7 ...
8 ...
9 ...
10 ...
11 ...
12 ...
13 ...
14 ...
15 ...
16 ...
17 ...
18 ...
19 ...
20 ...
并将此数据作为 DTO 模型列表发送:
public class DTO
{
public string Quarter {get; set;}
public decimal AggregatedValue {get; set;}
}
List<DTO> ResponseValues
谁能帮我构建 LINQ 查询来满足这个要求?
【问题讨论】:
-
您的表设计非常不标准,不适合 LINQ 样式的查询...除非您使用动态 LINQ,否则我看不出有任何方法可以执行少于 20 个查询。
-
是的,我知道它们是非标准的,这是特定的财务设计。如果它是微不足道的,我不会在这里发布它。我相信它可以“以某种方式”实现。
标签: c# .net sql linq entity-framework