【问题标题】:Single Result on Nested List Linq Lambda Expression [duplicate]嵌套列表 Linq Lambda 表达式的单个结果 [重复]
【发布时间】:2020-07-07 14:25:57
【问题描述】:

使用这些简单的类:

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# linq lambda


【解决方案1】:

试试:

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

您的代码不起作用的原因是您需要一个返回布尔值的谓词委托,而您的 lambda 返回一个 IEnumerable&lt;Line&gt;。

【讨论】:

  • 感谢您对返回类型不一致和 SelectMany 的解释。但是,这个表达式仍然只返回一行,因为该行表达式随后被链接,而我实际上只是试图获取目标表。
  • @Lamar 啊,对不起,我误解了你。查看更新。
  • 谢谢!以上似乎在我的情况下按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多