/ / LINQ elemento de lista de selección basado en la propiedad de la clase - c #, linq

Elemento de lista de selección de LINQ basado en la propiedad de clase - c #, linq

Tengo una clase (clase A) que tiene una lista deotra clase (clase B), que a su vez tiene una lista de otra clase (clase C). Me gustaría recuperar una instancia específica de classC cuando una propiedad ID coincida con lo que estoy buscando. Esto es lo que tengo en este momento:

                ClassC foundC = null;
foreach (var a in aList)
{
foreach (var b in a.bList)
{
foreach (var c in b.cList)
{
if (c.IdProperty == searchId)
{
foundC = c;
}
}
}
}

¿Es posible realizar esta búsqueda con Linq?

Respuestas

3 para la respuesta № 1
var c = aList
.SelectMany(_ => _.bList)
.SelectMany(_ => _.cList)
.FirstOrDefault(_ => _.IdProperty == searchId);

3 para la respuesta № 2
var foundC = aList.SelectMany(a => a.bList).SelectMany(b => b.cList).FirstOrDefault(c => c.IdProperty == searchId);

1 para la respuesta № 3

Podría usar anidado SelectManys + FirstOrDefault:

ClassC foundC = aList.SelectMany(a => a.bList.SelectMany(ab => ab.cList))
.FirstOrDefault(c => c.IdProperty == searchId);
if(foundC != null)
{
// found one
}