Rus*_*sby 18 .net c# sql linq average
有谁知道如何设置平均值的默认值?我有这样一条线......
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();
Run Code Online (Sandbox Code Playgroud)
由于我还没有收视率,因此会引发错误.如果我没有,我希望平均值默认为0.我认为这应该是一个扩展方法,我可以指定默认值应该是什么.
Jon*_*Jon 43
我不确定你DbVersions
和你的DbRatings
是什么以及哪个系列确实没有零件,但这是个主意:
var emptyCollection = new List<int>();
var average = emptyCollection.DefaultIfEmpty(0).Average();
Run Code Online (Sandbox Code Playgroud)
更新:(重复以下评论中所说的内容以提高可见性)
如果您发现自己需要DefaultIfEmpty
在类类型集合上使用,请记住您可以在聚合之前将LINQ查询更改为项目.例如:
class Item
{
public int Value { get; set; }
}
var list = new List<Item>();
var avg = list.Average(item => item.Value);
Run Code Online (Sandbox Code Playgroud)
如果你不想/无法构造一个默认的Item
用Value
等于0,则可以投射到集合int
的第一个和然后提供一个默认的:
var avg = list.Select(item => item.Value).DefaultIfEmpty(0).Average();
Run Code Online (Sandbox Code Playgroud)