C# LINQ中使用聚合函数报错 Sequence contains no elements

发布时间 2023-08-02 14:57:09作者: 清和时光

问题:

在一个linq查询中使用了平均值聚合函数Average,结果报错 Sequence contains no elements (序列不包含任何元素)
也就是说,使用某些linq的函数时,如果值不存在是会报错的,比如:

First()
Single()
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()

等,

解决方案:

使用空判断的方法:
比如不确定是否有值的情况不使用First()和Single(),而是使用FirstOrDefault()和SingleOrDefault()
如Average()可以在之前加 DefaultIfEmpty()

var avg=list.DefaultIfEmpty().Average(p=>p.age);