Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将结果按日历周分组,得出平均值_C#_Linq - Fatal编程技术网

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。