C# 如何使用linq获得列表中列表的平均值?
我正在创建一个方法,该方法将获得一个业务对象列表,这些对象将获得最高的平均评级。该方法以业务列表开始。每个业务都包含一个包含评级(int)的审阅对象列表 举例说明:C# 如何使用linq获得列表中列表的平均值?,c#,linq,average,C#,Linq,Average,我正在创建一个方法,该方法将获得一个业务对象列表,这些对象将获得最高的平均评级。该方法以业务列表开始。每个业务都包含一个包含评级(int)的审阅对象列表 举例说明: list<Review> reviews = curtBusiness.getReviews(); reviews[1].GetRating(); 如果上述代码正确,则首先在第一行中找到额定值的最大平均值 然后在第二行中返回具有该平均评级的企业列表。有人能确认这就是linq表达式所做的吗?您可以使用linq语句提取评级
list<Review> reviews = curtBusiness.getReviews();
reviews[1].GetRating();
如果上述代码正确,则首先在第一行中找到额定值的最大平均值
然后在第二行中返回具有该平均评级的企业列表。有人能确认这就是linq表达式所做的吗?您可以使用linq语句提取评级列表,然后调用该列表上的函数:
var average = (
from r in reviews
select r.getRateing()
).Average();
我不太明白你在找什么,但我猜一下 您有一个
Review
对象,该对象有一个类似int getRating()
的方法,您有一个这些对象的列表,您希望找到评级的平均值
像这样的东西就行了
// get your reviews
var reviews = curtBusiness.getReviews();
// get the average of the getRating() results of the reviews
var average = reviews.Average(r => r.getRating());
这就是你要找的吗?我可以提供进一步的解释,但我想确定这就是您想要的。我已经测试了我在更新中提出的解决方案:
double average = busInCat.Max(b=> b.GetReviews().Average(r => r.getRateing()));
return busInCat.Where(b => b.GetReviews().Average(r => r.getRateing()) == average).T
上述代码确实按预期工作。有一种方法可以在一条语句中实现这一点:
busInCat.Select(b => new { b, Avg = b.GetReviews().Average(r => r.GetRating()) })
.GroupBy(x => x.Avg, x => x.b)
.OrderByDescending(g => g.Key)
.FirstOrDefault();
这首先建立了一个企业及其平均值的列表。然后按平均值分组,按键(平均值)的降序对组进行排序,并取第一组。这一组是一个
IEnumerable
,即平均值最高的业务。很抱歉含糊不清。我已经用我认为是解决问题的方法更新了这个问题。如果是这样的话,它应该会让我明白我在做什么。小挑剔:getRating
可能应该拼写为getRating
,既然这是一种方法,它应该是PascalCase:getRating
…不用担心,我的拼写很糟糕。
busInCat.Select(b => new { b, Avg = b.GetReviews().Average(r => r.GetRating()) })
.GroupBy(x => x.Avg, x => x.b)
.OrderByDescending(g => g.Key)
.FirstOrDefault();