gpt4 book ai didi

c# - 如何在 Linq 查询中获取分组结果的平均值

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:18 25 4
gpt4 key购买 nike

我有一个获取过去 12 个月评分的 linq 查询:

var ratingsByMonth =
from month in Enumerable.Range(0, 12)
let key = new { Year = DateTime.Now.AddMonths(-month).Year, Month = DateTime.Now.AddMonths(-month).Month }
join groupedRating in ratings on key
equals new
{
groupedRating.RatingDate.Year,
groupedRating.RatingDate.Month
} into g
select new {
Date = key,
Rating = g.Select(x=>x.Rating)
};

ratingsByMonth 从我的数据集中返回以下 JSON:

{Date: {Year: 2016, Month: 11}, Rating: [4]}
{Date: {Year: 2016, Month: 10}, Rating: [5, 5, 4]}
{Date: {Year: 2016, Month: 9}, Rating: []}
{Date: {Year: 2016, Month: 8}, Rating: []}
{Date: {Year: 2016, Month: 7}, Rating: []}
{Date: {Year: 2016, Month: 6}, Rating: []}
{Date: {Year: 2016, Month: 5}, Rating: []}
{Date: {Year: 2016, Month: 4}, Rating: []}
{Date: {Year: 2016, Month: 3}, Rating: []}
{Date: {Year: 2016, Month: 2}, Rating: []}
{Date: {Year: 2016, Month: 1}, Rating: []}
{Date: {Year: 2015, Month: 12}, Rating: []}

不过,我正在尝试将评级字段汇总为平均值。我试过这个:

return Json(new
{
Average = ratingsByMonth.Average(x=>x.Rating),
Dates = ratingsByMonth.Select(x => Date)
});

但是我在平均值 - 行上突出显示了以下错误:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'long?'

我正在寻找的输出是:

{Date: {Year: 2016, Month: 11}, Rating: 4}
{Date: {Year: 2016, Month: 10}, Rating: 3.5}
{Date: {Year: 2016, Month: 9}, Rating: 0}
{Date: {Year: 2016, Month: 8}, Rating: 0}
{Date: {Year: 2016, Month: 7}, Rating: 0}
{Date: {Year: 2016, Month: 6}, Rating: 0}
{Date: {Year: 2016, Month: 5}, Rating: 0}
{Date: {Year: 2016, Month: 4}, Rating: 0}
{Date: {Year: 2016, Month: 3}, Rating: 0}
{Date: {Year: 2016, Month: 2}, Rating: 0}
{Date: {Year: 2016, Month: 1}, Rating: 0}
{Date: {Year: 2015, Month: 12}, Rating: 0}

编辑:

已尝试更改为以下内容:

return Json(new
{
Average = ratingsByMonth.Select(x => x.Rating).SelectMany(x => x).Average(),
Dates = ratingsByMonth.Select(x => x.Date.Month)
});

但是,这只为我提供了整个数据集中的单个“平均值”值,而不是每个日期的平均值。

编辑:

这是示例数据:

RatingID    Rating  RatingDate
5 5 2016-10-09 20:11:29.590
11 0 2016-10-09 20:14:42.503
21 5 2016-10-09 20:24:15.667
60 4 2016-10-28 11:01:21.220
64 4 2016-11-03 16:30:47.657

所以 11 月的平均值应该是 4,10 月的平均值应该是 3.5 (5+0+5+4/4)

最佳答案

在原始查询中,您可能想要这样做。

//other code removed for brevity
select new {
Date = key,
Rating = g.Count() > 0 ? g.Average(x => x.Rating) : 0
};

然后返回结果

return Json(ratingsByMonth);

关于c# - 如何在 Linq 查询中获取分组结果的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40855954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com