ho riletto meglio il post, effettivamente il problema è un po' piu complesso
per mio personale esercizio ho cercato di risolvere la questione utilizzando solo linq, spero nel modo piu giusto:
Il risultato finale è:
A1
--ABC
A3
--ABC
--ABC
esclude sia A2 che i singoli ordini in A1 che non siano ABC.
ti ho messo qualche commento alla query linq
codice:
List<Azienda> aziende = new List<Azienda>
{
new Azienda
{
ID = "A1",
Ordini = new List<Ordine>
{
new Ordine { ID = "ABC" },
new Ordine { ID = "NO" }
}
},
new Azienda
{
ID = "A2",
Ordini = new List<Ordine>
{
new Ordine { ID = "NO" },
new Ordine { ID = "NO" }
}
},
new Azienda
{
ID = "A3",
Ordini = new List<Ordine>
{
new Ordine { ID = "ABC" },
new Ordine { ID = "ABC" }
}
}
};
var query = aziende
.SelectMany(a => a.Ordini.Where(o => o.ID == "ABC") //esclude le aziende che non hanno nemmeno un ordine ABC
.Select(o => new { az = a, or = o })) //seleziono in una nuova classe anonima per tenere traccia dell'azienda
.GroupBy(g => g.az) //raggruppo per azienda
.Select(s => new Azienda //ora riporto la collection di tipo IGrouping in una di tipo List<Azienda>
{
ID = s.Key.ID,
Ordini = s.Key.Ordini
.Where(o => o.ID == "ABC") // Ora per ogni azienda escludo anche gli ordini
.ToList()
})
.ToList();
EDIT
queste sono le due classi:
codice:
public class Ordine
{
public string ID { get; set; }
}
public class Azienda
{
public string ID { get; set; }
public List<Ordine> Ordini { get; set; }
public Azienda()
{
Ordini = new List<Ordine>();
}
}