我收到以下错误: 类型为' System.InvalidOperationException'的未处理异常发生在System.Core.dll
中附加信息:序列不包含任何元素
在
MainFields.ForEach(Field => Field.Size = Math.Max(FilesObject.SelectMany(x => x.Fields).Where(y => y.Name == Field.Name).Select(m => m.Size).Max(), Field.Size));
我的MainFields对象需要根据FilesObject中的所有字段进行更新。问题的根本原因有时MainFields名称不存在于FilesObject中,这是必要的。
我可以把它分成一个循环并添加一些逻辑检查,但我希望在Linq中有一种方法可以避免这种情况。
答案 0 :(得分:3)
有这样一种方法 - 在致电DefaultIfEmpty()
之前提出Max()
:
Math.Max(FilesObject.SelectMany(x => x.Fields)
.Where(y => y.Name == Field.Name).Select(m => m.Size).DefaultIfEmpty(0).Max()
如果collection不包含任何元素, DefaultIfEmpty
将返回带有一个默认元素的可枚举,因此Max()
将返回此元素(因为它是唯一的一个)用于空集合(当然使用适当的默认值,我只使用0例如。)