Consente di dire che abbiamo:LINQ espressione per filtrare l'elenco della collezione di entità, e mantenere la lista delle entità
public class Foo
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Bar> { get; set; }
}
public class Bar
{
public long Id { get; set; }
public int Age { get; set; }
public virtual Foo { get; set; }
public long FooId { get; set; }
}
I nostri dati possono essere simile a questa: (assumere List<Foo>
)
// Forget the syntax, just to demonstrate data
foo[0] = new Foo{ Id = 1, Name = "A", Bar = { collection of Bars with Ages over 10 }};
foo[1] = new Foo{ Id = 2, Name = "B", Bar = { collection of Bars with Ages over 20 }};
foo[2] = new Foo{ Id = 3, Name = "C", Bar = { collection of Bars with Ages under 10 }};
Ora, diciamo che volevo tutti quelli Foo
s ma con il loro Bar
s includendo solo uno Bar
con un'età compresa tra 5-25.
Per qualcosa di simile, vorrei lavorare al contrario e ottenere tutte le barre, quindi ottenere tutti i Foos associati a quelle barre, e ri-mappare le barre di nuovo a Foo. Sembra troppo complicato di quanto dovrebbe essere.
Per essere più chiari - Tutti Foos con solo i loro bar con età compresa tra i 5 ei 25 :)
http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – Androiderson
La tua domanda è una specie di poco chiara - vuoi tutto 'Foo's con solo il loro' Bar's con età tra 5 e 25 o vuoi solo i 'Foo's che hanno' Bar's con età tra 5 e 25? –
Un modo, non ancora suggerito, è di implementare un metodo di estensione su Foo con una dichiarazione simile a: 'GetBarsBetween (int lower, int upper);' e usa semplicemente questo metodo di estensione per fare il filtraggio e il recupero delle barre corrette all'interno un Foo. Quindi puoi semplicemente selezionare tutti i Foo's 'where foo.GetBarsBetween (5, 25) .Any()'. Questo non richiede alcuna allocazione di memomry aggiuntiva o ristrutturazione degli oggetti attuali. Due svantaggi, non è possibile utilizzare semplicemente il codice esistente per lavorare con le barre filtrate e il tempo di calcolo è leggermente superiore. – Polity