有人知道如何为平均值设置默认值吗?我有这样一条线…
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。
DefaultIfEmpty
我不确定您是什么DbVersions,DbRatings以及哪个集合恰好有零个项目,但这就是这个主意:
DbVersions
DbRatings
var emptyCollection = new List<int>(); var average = emptyCollection.DefaultIfEmpty(0).Average();
更新:( 重复以下评论中的内容以提高知名度)
如果发现自己需要使用DefaultIfEmpty类类型的集合,请记住,可以 在 聚合 之前 将LINQ查询更改为project 。例如:
class Item { public int Value { get; set; } } var list = new List<Item>(); var avg = list.Average(item => item.Value);
如果你不想/无法构造一个默认的Item用Value等于0,则可以投射到集合int的第一个和 然后 提供一个默认的:
Item
Value
int
var avg = list.Select(item => item.Value).DefaultIfEmpty(0).Average();