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 № 1var 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 SelectMany
s + FirstOrDefault
:
ClassC foundC = aList.SelectMany(a => a.bList.SelectMany(ab => ab.cList))
.FirstOrDefault(c => c.IdProperty == searchId);
if(foundC != null)
{
// found one
}