c# - Max,SelectMany,可能没有响应

标签 c# linq max

我收到以下错误: System.Core.dll 中出现“System.InvalidOperationException”类型的未处理异常

附加信息:序列不包含任何元素

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 中的所有字段进行更新。问题的根本原因有时是 FilesObject 中不存在 MainFields 名称,这是必要的。

我可以将其分解为一个循环并添加一些逻辑检查,但我希望 Linq 中有一种方法可以避免这种情况。

最佳答案

有这样一种方法 - 在调用 Max() 之前放置 DefaultIfEmpty():

Math.Max(FilesObject.SelectMany(x => x.Fields)
  .Where(y => y.Name == Field.Name).Select(m => m.Size).DefaultIfEmpty(0).Max()
如果集合不包含任何元素,

DefaultIfEmpty 将返回带有一个默认元素的枚举,因此 Max() 将为空集合返回该元素(因为它是唯一的) (当然使用适当的默认值,我使用 0 只是为了举例)。

关于c# - Max,SelectMany,可能没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977524/

相关文章:

c# - 自定义页面类

c# - 如何动态地将列添加到 RadGrid?

ide - 如何在 VB6 中声明 MAX_DOUBLE?

c# - 使用 LINQ 选择 List<T> 中的项目并添加整数以填充新 List<T>

c# - 等待异步谓词列表,但在第一个 false 时退出

mysql JOIN ON 语句与 MAX 函数

matlab - 圆中矩形的最大堆积

c# - 是否可以使用 C#/.net 创建 Firebase 主题消息传递

c# - 将两个查询合并为一个查询

c# - 使用带种子的 LINQ 聚合,Resharper 声称表达式始终为假