Я пытаюсь отфильтровать список по свойству субподрядчика с linq, но мне не удается сделать его правильно. Например, у меня есть эти классыC# Linq и фильтр по свойствам подзадачи
public class MyClass1
{
public int Id { get; set; }
public List<MyClass2> MyClasses2 { get; private set; }
}
public class MyClass2
{
public int Id { get; set; }
public List<MyClass3> MyClasses3 { get; private set; }
/* EDIT */
public virtual void RemoveClass3(MyClass3 elementToRemove) { ... }
}
public List<myClass2> myList2_1;
public List<myClass2> myList2_2;
public class MyClass3
{
public int Id { get; set; }
public Boolean Property1 { get; set; }
}
public List<myClass3> myList3_1;
public List<myClass3> myList3_2;
public List<myClass3> myList3_3;
и для данных:
myClass3 3A = new myClass3 { Id=1, Property1=true};
myClass3 3B = new myClass3 { Id=2, Property1=false};
myClass3 3C = new myClass3 { Id=3, Property1=false};
myClass3 3D = new myClass3 { Id=4, Property1=false};
myList3_1.AddRange(new []{ 3A, 3B });
myList3_2.AddRange(new []{ 3C });
myList3_3.AddRange(new []{ 3D });
myClass2 2A = new myClass2 { Id=1, MyClasses3=myList3_1};
myClass2 2B = new myClass2 { Id=2, MyClasses3=myList3_2};
myClass2 2C = new myClass2 { Id=3, MyClasses3=myList3_3};
myList2_1.AddRange(new []{ 2A, 2B });
myList2_2.AddRange(new []{ 2C });
и, наконец,
myClass1 1A = new MyClass1 { Id=1, MyClasses2=myList2_1 };
myClass1 1B = new MyClass1 { Id=2, MyClasses2=myList2_2 };
public List<MyClass1> list;
list.AddRange(new []{ 1A, 1B });
Получаем список для печати, как это:
1-1-1-true
1-1-2-false
1-2-3-false
2-3-4-false
Затем, с этим, я хочу отфильтровать свой список в Property1. Например, мой отфильтрованный список на property1 по истине должно быть так:
filtered_list = 1-1-1-true
Я надеюсь, что я достаточно ясно, я еще могу попытаться объяснить больше.
И чтобы закончить, моя проблема: я хочу применить запрос Linq к списку, чтобы получить filter_list. И я попробовал Any, Where .... Мне не удалось получить список с фильтрованными подсписками.
Спасибо за помощь мне и сказать, как я могу использовать Linq фильтровать свой список и подсписки
EDIT: Я видел, что это было невозможно или почти сделать это с помощью LINQ в 1 шаг. Итак, я думаю, с помощью dtb, другое решение в 3 этапа: - отфильтровать все списки MyClass3 всех элементов MyClass2 - фильтр MyClass2, где есть список из 1 MyClasses3 в списке MyClasses3 - фильтр MyClass1, где есть наименее 1 элемент в списке MyClasses2
Мне удается сделать 3-й шаг, но я не для 2 первых. Вы можете мне помочь?
У меня есть метод RemoveClass3, чтобы помочь на первом этапе (я ставлю в MyClass2 декларации)
спасибо за этот лазерно-быстрый ответ! Я попробую завтра рано и скажу вам результат. Благодаря ! – Remi
Итак, я стараюсь, но он не работает: Список хорошо фильтруется, но MyClasses2 и MyClasses3 - нет. На моем примере я получаю 3 первые строки вместо первого. Но когда я лучше понимаю вашу цель, я считаю, что понимаю, почему: Any() не фильтрует, а смотрит только в том случае, если один элемент в порядке. Таким образом, он приносит все элементы (хорошие и плохие). –
Remi
На самом деле, это немного сложнее: у меня есть 3 класса, и я печатаю таблицу с одним столбцом по классу (Id и имя печатаются). Поэтому мне не нужно печатать, как 1-2-3-4, это просто для того, чтобы представить его более ясным.Но это не так :) – Remi