首页 > 解决方案 > 嵌套列表 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 表达式缺少什么?

标签: c#linqlambda

解决方案


尝试:

obj.Sheets.SingleOrDefault(s => s.Lines.Any(line => line.LineId == command.LineId))

您的代码不起作用的原因是您需要一个返回布尔值的谓词委托,而您的 lambda 返回一个IEnumerable<Line>.


推荐阅读