c# - 嵌套列表 Linq Lambda 表达式上的单个结果
问题描述
使用这些简单的类:
public class Object
{
List<Sheet> Sheets { get; set; }
}
public class Sheet
{
List<Line> Lines { get; set; }
}
public class Line
{
int LineId { get; set; }
}
我正在尝试构建一个 LINQ 查询,以查找具有相应 lineId的单个工作表。在这种情况下,lineId 对于一张纸来说是唯一的。也就是说,一个工作表可以有多行,但没有两个工作表可以共享相同的行。
给定一个对象,基本foreach
代码看起来像这样:
Sheet targetSheet = null;
foreach (var sh in Sheet)
{
foreach (var l in sh.Lines)
{
if (l.Id == command.LineId)
{
targetSheet = sh;
break;
}
}
}
我(损坏的)尝试使用 Lambda 表达式进行 LINQ 查询:
Sheet targetSheet = Sheets.SingleOrDefault(s => s.Lines.Where(line => line.Id == command.LineId));
谁能帮我看看这个 lambda 表达式缺少什么?
解决方案
尝试:
obj.Sheets.SingleOrDefault(s => s.Lines.Any(line => line.LineId == command.LineId))
您的代码不起作用的原因是您需要一个返回布尔值的谓词委托,而您的 lambda 返回一个IEnumerable<Line>
.
推荐阅读
- python - Spearman scipy 状态,关于大数据
- python - 在 matplotlib 中使用平面方程绘制多个 3D 平面
- python - 从具有列表作为值的字典中的值开始查找键
- javascript - 将 React 类组件重写为功能组件
- json - TypeError:无法读取未定义和 const gmailEmail = functions.config().gmail.email 的属性“电子邮件”;
- python - 在使用 Selenium Django 进行自动化测试期间,database_table 被锁定
- android - UIDocumentInteractionController 等效于 Android Java
- java - Android - 我如何运行一个永远随机接收数据的服务器套接字?
- swiftui - 从 AppKit NSButton 打开新的 SwiftUI 窗口
- r - 编码挑战:如果其他 col 中的行为 TRUE,则计算 col 值的总和(表摘要)