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# 如何使用linq获得列表中列表的平均值?_C#_Linq_Average - Fatal编程技术网

C# 如何使用linq获得列表中列表的平均值?

C# 如何使用linq获得列表中列表的平均值?,c#,linq,average,C#,Linq,Average,我正在创建一个方法,该方法将获得一个业务对象列表,这些对象将获得最高的平均评级。该方法以业务列表开始。每个业务都包含一个包含评级(int)的审阅对象列表 举例说明: list<Review> reviews = curtBusiness.getReviews(); reviews[1].GetRating(); 如果上述代码正确,则首先在第一行中找到额定值的最大平均值 然后在第二行中返回具有该平均评级的企业列表。有人能确认这就是linq表达式所做的吗?您可以使用linq语句提取评级

我正在创建一个方法,该方法将获得一个业务对象列表,这些对象将获得最高的平均评级。该方法以业务列表开始。每个业务都包含一个包含评级(int)的审阅对象列表

举例说明:

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();