多个嵌套的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'。
我做错了什么?
您要找的是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的延迟执行,这将不会循环两次,而只返回它将找到的第一个嵌套元素(或不返回)。