多个嵌套的FirstOrDefault

本文关键字:FirstOrDefault 嵌套 | 更新日期: 2023-09-27 18:08:40

我有以下模型:

public class Stredisko
{
    public string Name { get; set; }
    public ObservableCollection<SubStredisko> Pracoviska { get; set; }
    public ObservableCollection<SubStredisko> Dohodari { get; set; }
}
public class SubStredisko
{
    public string Name { get; set; }
    public string Code { get; set; }
    public VyplatnePasky VyplatnaPaska { get; set; }
    public MzdoveNaklady MzdoveNaklady { get; set; }
    public Poistne Poistne { get; set; }
}

我现在试图运行一个超级简单的LINQ查询,它应该返回第一个元素,匹配以下条件:

var sStredisko = Strediska.FirstOrDefault(
                    n => n.Pracoviska.FirstOrDefault(x=>x.Name == "somename"));
ObservableCollection<Stredisko> Strediska 下运行这个条件

然而,未知的原因(对我来说),它给了我以下错误:不能隐式地将类型'SubStredisko'转换为'bool'

我做错了什么?

多个嵌套的FirstOrDefault

您要找的是Enumerable.Any:

var sStredisko = Strediska.FirstOrDefault(
                              n => n.Pracoviska.Any(x => x.Name == "somename"));

FirstOrDefault将生成与谓词匹配的第一个元素。您希望匹配第一个元素并产生一个bool,表示找到了匹配,这就是Any所做的。

部分与OP的问题相关,这是我发现这个问题时正在搜索的内容:我需要得到嵌套的对象,而不是上面那个。

所以重新使用OP的模型它看起来像这样:

var sSubStredisko = Strediska
    .Select(n => n.Pracoviska.FirstOrDefault(x => x.Name == "somename"))
    .FirstOrDefault(s => s != null);

由于LINQ的延迟执行,这将不会循环两次,而只返回它将找到的第一个嵌套元素(或不返回)。