gpt4 book ai didi

c# - Linq中默认值的平均扩展方法

转载 作者:IT王子 更新时间:2023-10-29 04:53:08 35 4
gpt4 key购买 nike

有人知道如何设置平均值的默认值吗?我有这样一行...

dbPlugins = (from p in dbPlugins
select new { Plugin = p, AvgScore = p.DbVersions.Average(x => x.DbRatings.Average(y => y.Score)) })
.OrderByDescending(x => x.AvgScore)
.Select(x => x.Plugin).ToList();

这会引发错误,因为我还没有评分。如果没有,我希望平均值默认为 0。我认为这应该是一种扩展方法,我可以在其中指定默认值。

最佳答案

有:DefaultIfEmpty .

我不确定您的 DbVersionsDbRatings 是什么以及哪个集合恰好有零个项目,但这是我的想法:

var emptyCollection = new List<int>();
var average = emptyCollection.DefaultIfEmpty(0).Average();

更新:(重复下面评论中的内容以提高知名度)

如果您发现自己需要对类类型的集合使用 DefaultIfEmpty,请记住您可以将 LINQ 查询更改为 before 聚合。例如:

class Item
{
public int Value { get; set; }
}

var list = new List<Item>();
var avg = list.Average(item => item.Value);

如果你不想/不能构造一个默认的 Item 并且 Value 等于 0,你可以投影到一个 ints first and then 提供默认值:

var avg = list.Select(item => item.Value).DefaultIfEmpty(0).Average();

关于c# - Linq中默认值的平均扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5467114/

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