0
检索按月分组每天的数据记录我有以下结构的表:最有效的方法使用EF 6
| Column Name | Type |
|-------------|--------------- |
| ProjectId | INT |
| StartDate | INT |
| Amount | DECIMAL(12, 2) |
的StartDate
是INT
,但它实际上代表了一天,格式为YYYYMMDD
。
的一个项目(仅工作日存储,没有星期天或星期六)的表存储日常的数值,具体如下:
| ProjectId | StartDate | Amount |
|-----------|-----------|--------|
| 1 | 20140926 | 0.5 |
| 1 | 20140929 | 0.5 |
| 1 | 20140930 | 0.8 |
| 1 | 20141001 | 1 |
| 1 | 20141002 | 1 |
| 1 | 20141003 | 0.5 |
| 2 | 20141001 | 0.6 |
| 2 | 20141002 | 0.5 |
什么是最有效的方式来获得平均每月值每个项目?我正在使用EF 6(DbContext
方法)和SQL Server 2012?我正在寻找使用Linq-to-Entities的解决方案。
理想的结果会是这样的:
| ProjectId | StartDate | Amount |
|-----------|-----------|--------|
| 1 | 20140926 | 0.6 |
| 1 | 20141001 | 0.83 |
| 2 | 20141001 | 0.55 |
我有一个解决办法,但我不知道这是最理想的:
var results = dbContext.ProjectValues
.GroupBy(pv =>
new
{
ProjectId = pv.ProjectId,
Year = pv.StartDate.Year,
Month = pv.StartDate.Month,
})
.Select(g =>
new
{
ProjectId = g.Key.ProjectId,
StartDate = g.Min(v => v.StartDate),
Amount = g.Average(v => v.Amount)
})
.ToList();
虽然SQL代码是正确的,我想要一个使用linq-to-entities的解决方案。 – kjv 2014-10-07 19:06:00
@kjv,明白了。我并不是专家。 – radar 2014-10-07 19:07:26