У меня ниже класса и связанных с ним данных, здесь я пытаюсь отфильтровать книги с именем книги с именем "N1", но это не работает, и я получаю оба элемента книги в `filterList, пожалуйста, предложите, почему и что лучший способ заполнить наблюдаемую коллекцию на основе данных фильтра?
var lstStudents = new List<Student>
{
new Student
{
Name = "studen1",
Standards = new List<Standard> {new Standard {Name = "std1"}, new Standard {Name = "std2"}},
Books = new List<Book> {new Book {Name = "N1", Page = "20"}, new Book {Name = "N2", Page = "30"}}
},
new Student
{
Name = "studen2",
Standards = new List<Standard> {new Standard {Name = "std1"}},
Books = new List<Book> {new Book {Name = "N1", Page = "20"}, new Book {Name = "N2", Page = "30"}}
},
new Student
{
Name = "studen3",
Standards = new List<Standard> {new Standard {Name = "std1"}},
Books = new List<Book> {new Book {Name = "N1", Page = "20"}, new Book {Name = "N2", Page = "30"}}
}
};
var filterList = lstStudents.Where(c => c.Standards.Count == 1
&& c.Standards.Any(d => d.Name == "std1")
&& c.Books.Any(d => d.Name == "N1"))
.ToList();
//why both books with Name N1 & N2 both filtered as I am filtering with name = N1?
var data = new ObservableCollection<Data>();
foreach (var item in filterList)
{
data.Add(new Data { BookName = item.Name, BookPage = item.Books[0].Page });
}
Поддерживающие классы:
public class Data
{
public string StudentName { get; set; }
public string BookName { get; set; }
public string BookPage { get; set; }
}
public class Student
{
public string Name { get; set; }
public List<Standard> Standards { get; set; }
public List<Book> Books { get; set; }
}
public class Standard
{
public string Name { get; set; }
}
public class Book
{
public string Name { get; set; }
public string Page { get; set; }
}