Linq查询以返回具有特定属性值的嵌套数组



我一直在搜索多个资源,但找不出这一个;我正在尝试基于嵌套了几个级别深的Property来筛选对象数组。我已经简化了一些东西,所以假设我有以下类:

class A {
  B[] bb;
}
class B 
  C[] cc;
}
class C {
  string value;
}

现在的代码是:

A[] aa = ...;
A[] filteredAa = aa.Where(... //NEED HELP HERE

我想做的是过滤aa数组,这样它只给我那些至少有一个B元素的A元素,至少有一个子C元素的值为"hello"(例如,如果aa[0].bb[3].cc[2].value="hello",那么aa[0]将被包括在filteredAa数组中(。

这种类型的过滤甚至可以完成吗?我认为并希望这是有道理的,但如果我能进一步澄清,请告诉我。

你需要使用Any-听起来你需要使用两次:

var query = aa.Where(a => a.bb.Any(b => b.cc.Any(c => c.value == "hello")));

所以从内部着手:

  • 如果C对象的值为"hello",则该对象非常有用
  • 如果C的任何值都有用,则B对象是有用的
  • 如果B的任何值都有用,则A对象是有用的
  • Where过滤一系列A对象,只留下有用的对象

如果真的想要一个数组,那么可以在末尾使用ToArray(),但我通常会使用ToList或将其保留为IEnumerable<A>

试试这个:

A[] filteredAa = aa.Where(a => a.bb.Any(b => b.cc.Any(c => c.value == "hello"))).ToArray();

如果您正在查找Value是特定值的位置:

var result = aa.Where(a=>a.bb.Any(b => b.cc.Any(c => c.Value == "hello"));

如果你只想得到所有有价值的东西:

var result = aa.Where(a=>a.bb.Any(b => b.cc.Any(c => !string.IsNullOrEmpty(c.Value)));
filteredAa = aa.Where(x => x.bb.Any(y => y.cc.Any(z => z.value == "hello")))

相关内容

  • 没有找到相关文章

最新更新