Спасибо @ 31eee384 за поставив меня на правильный путь.
Я также включил расширение Except()
, чтобы удалить пустые списки. Я уверен, что есть более эффективный метод написания этого, поэтому, пожалуйста, напишите, если вы знаете об этом.
Это метод расширения, который я создал.
internal static List<Foo> OnlyWithQuxs(this List<Foo> model)
{
var foosToRemove = new List<Foo>();
foreach (var foo in model)
{
var barsToRemove = new List<Bar>();
foreach (var bar in foo.bars)
{
var bazWithQux = new List<Baz>();
var bazsToRemove = new List<Baz>();
foreach (var baz in bar.bazs)
{
baz.Quxs = GetbazQuxs(baz.Id)
.Where(qux => qux.Property == someValue)
.ToList();
bazWithQux.Add(baz);
if (baz.Quxs == null || baz.Quxs.Count() == 0)
bazsToRemove.Add(baz);
}
bar.bazs = bazWithQux.Except(bazsToRemove).ToList();
if (bar.bazs == null || bar.bazs.Count() == 0)
barsToRemove.Add(bar);
}
foo.bars = foo.bars.Except(barsToRemove).ToList();
if (foo.bars == null || foo.bars.Count() == 0)
foosToRemove.Add(foo);
}
return model.Except(foosToRemove).ToList();
}
Если предположить, что 'listFoo' ваш список' Foo' тогда мы имеем 'вар filteredListFoo = listFoo.Select (bar => bar.Select (baz => baz.Select (qux => qux.myproperty == 'somevalue'))) ' –
Ваше правление предполагает, что структура рекурсивна. Это правда? Это поставит вопрос намного легче понять и ответить гораздо проще. – 31eee384
Рекурсивный. – Ian