Tengo un question using these same examples - esta pregunta se centra en un problema diferente. Dadas las siguientes clases:Cómo obtener una lista aplanada de la clase anidada Lista <T>?
[XmlRoot]
public class Family {
[XmlElement]
public List<Person> Person;
}
public class Person {
[XmlAttribute("member")]
public MemberType Member { get; set; }
[XmlAttribute("id")]
public int Id { get; set; }
[XmlElement]
public string Surname { get; set; }
[XmlElement]
public string Forename { get; set; }
[XmlElement("Person")]
public List<Person> People;
}
public enum MemberType {
Father,
Mother,
Son,
Daughter
}
Si Family
tiene un método definido como tal:
public IEnumerable<Person> Find (Func<Person, bool> predicate) {
// how do I get SelectMany to flatten the list?
foreach (var p in family.Person.SelectMany(p => p)) {
if(predicate(p)) {
yield return p;
}
}
}
que necesitan para poder ejecutar el predicado sobre una lista de aplanado Person
. En el ejemplo anterior, SelectMany
, no está preparando la lista como esperaba. Lo anterior en realidad no se compilará porque el tipo inferido no se puede determinar.
¿Cómo puedo hacer que la colección Family.Person se convierta en una lista aplanada de Persona?
¿Usted intentó 'p => p.People'? – jvstech
Si tiene bucles en su estructura de datos, puede utilizar esta solución: http://stackoverflow.com/questions/141467/recursive-list-flattening/24747394#answer-24747394 – Aidin