c# – Linq中的默认值的平均扩展方法
发布时间:2020-12-15 06:18:46 所属栏目:百科 来源:网络整理
导读:任何人都知道如何设置一个平均值的默认值?我有这样一条线 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.Plugi
任何人都知道如何设置一个平均值的默认值?我有这样一条线
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 .
我不知道你的DbVersions和DbRatings是什么,哪个集合完全有零个项目,但这是一个想法: var emptyCollection = new List<int>(); var average = emptyCollection.DefaultIfEmpty(0).Average(); 更新:(重复以下意见中的内容以提高可见度) 如果您发现自己需要在类类型的集合上使用DefaultIfEmpty,请记住,您可以在聚合之前将LINQ查询更改为项目.例如: class Item { public int Value { get; set; } } var list = new List<Item>(); var avg = list.Average(item => item.Value); 如果您不想/不能构造一个值等于0的默认项,则可以首先投影到一个int集合,然后提供一个默认值: var avg = list.Select(item => item.Value).DefaultIfEmpty(0).Average(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |