C# 将结果按日历周分组,得出平均值
我有一个如下的数据集C# 将结果按日历周分组,得出平均值,c#,linq,C#,Linq,我有一个如下的数据集 Name Start Date End Date Percentage A 1/1/2015 31/3/2015 50 B 1/1/2015 30/6/2015 100 C 1/4/2015 30/6/2015 50 Year Week Average 2015 1 --- 2015 2 --- 我想按日历周对这些数据集进行分组,并
Name Start Date End Date Percentage
A 1/1/2015 31/3/2015 50
B 1/1/2015 30/6/2015 100
C 1/4/2015 30/6/2015 50
Year Week Average
2015 1 ---
2015 2 ---
我想按日历周对这些数据集进行分组,并需要得到平均百分比
结果如下
Name Start Date End Date Percentage
A 1/1/2015 31/3/2015 50
B 1/1/2015 30/6/2015 100
C 1/4/2015 30/6/2015 50
Year Week Average
2015 1 ---
2015 2 ---
获得此结果的最佳linq查询是什么。我尝试了以下代码。但这些值并不正确
var grouped = result.Select(p =>
new
{
Week = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear
(p.StartDate, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday),
Year = p.StartDate.Year,
EndDate = p.EndDate,
percentage = p.percentage
})
.GroupBy(x => new { x.Year, x.Week })
.OrderBy(x=>x.Key.Year).ThenBy(x=>x.Key.Week)
.Select((g, i) => new
{
g.Key.Year,
g.Key.Week,
Sum = g.Average(t => t.percentage)
});
我在这里没有使用“年”,但你可以自己构思并添加年份。你所说的日历周到底是什么意思?有很多可能的定义-你肯定想要你现在正在使用的那个吗?另外,这是在LINQtoObjects、LINQtoSQL、EF中,还是在其他方面?你所说的数值不正确是什么意思?您应该显示示例输入、预期输出和实际输出。您的日期范围大于一周。因此,您可能需要对其进行分解以使其具有某种意义。这是一个资源分配数据。我想要得到的是从1/1/2015到31/3/2015的平均分配,大约有12周,你的资源分配了50。所以,你现在考虑的只是50到第一周的查询是你想要或应该考虑的所有的12周。例如,对于1月1日的名字,A和B的总有150,平均值是75。第二周也一样。想象一下,在给定的一周内,如果a、B和C的总数为200,则平均值为66.66。像这样,我需要对这些数据进行分组和深入研究。谢谢,我试图理解代码。在1月第一周的示例中,平均值应为65。但是结果是35。我不知道我在哪里遗漏了它。首先,你的百分比是int,所以我们这里有舍入问题。您可以通过将百分比更改为两倍来提高它。第二,第一个周期是12周,所以平均百分比是3.5,第二个周期是24周,所以平均值是3.5。因此,在1月的第一周,你有两个项目,每个项目的平均值为3.5,因此总平均值为3.5。