c# - 如果没有记录,如何避免 .Average 在 LINQ 表达式中引发异常?
问题描述
这是我的 LINQ 查询:
var t2 = t1.GroupBy(x => x.DateYYMMDD)
.OrderBy(g => g.Key)
.Select(g => new ScreenTimeModel
{
DateYYMMDD = $"20{g.Key.Substring(0, 2)}/{g.Key.Substring(2, 2)}/{g.Key.Substring(4, 2)}",
LearnTimeAvg = (int)g.Where(gx => gx.Mode == 2).Average(gi => gi.ScreenSeconds)
}).ToList();
在没有记录会议的情况下会出现问题Mode == 2
。
在这种情况下,有没有一种方法可以默认LearntTimeAvg
为 0,因为目前它会引发异常并且没有创建列表?
解决方案
您可以使用DefaultIfEmpty
方法:
g.Where(gx => gx.Mode == 2).DefaultIfEmpty().Average(gi => gi.ScreenSeconds)
它的用法是:
返回 IEnumerable 的元素,如果序列为空,则返回默认值的单例集合。
推荐阅读
- javascript - 如何设置程序执行的时间限制?
- ios - 在 Swift 5 中,collectionView 页脚内的按钮无法完全点击
- python - 在 django 中为 api 视图创建自定义权限
- python - 如何对熊猫数据框进行分组并对另一列中的值求和
- java - 浏览器中的“->”和IDE中的“->”有什么区别?
- javascript - 应该添加列表的按钮 css 不起作用
- javascript - 将 JSON 字符串导出到服务器上的文件
- typescript - 在 TypeScript 配置文件“tsconfig.json”中,将“lib”编译器选项设置为“dom”和“dom.iterable”是否多余?
- python - 如何创建带有图像边框的透明圆形 QWebEngineView?
- node.js - 我从 npm 收到 ENOMPTY 错误,我尝试了所有方法,但没有工作,已经 2 小时了