filtern Können sagen, wir haben:Linq Ausdruck eine Liste von Unternehmen Sammlung und pflegen Liste der Entitäten
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; }
}
Unsere Daten etwas wie folgt aussehen: (nehmen 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 }};
Nun, sagen wir, ich wollte alle diese Foo
s aber mit ihrer Bar
s nur einschließlich einer Bar
mit einem Alter zwischen 5-25.
Für so etwas würde ich rückwärts arbeiten und alle Bars bekommen, dann alle assoziierten Foos zu diesen Bars bekommen, und die Bars wieder auf Foo abbilden. Scheint übermäßig kompliziert, als es sein sollte.
Um mehr klar zu sein - Alle Foos mit nur ihre Bars im Alter zwischen 5 und 25 :)
http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – Androiderson
Ihre Frage Art unklar ist - tun Sie alle 'Foo's wollen nur ihre' Bar's mit Alter zwischen 5 und 25 oder willst du nur die 'Foo's' mit' Bar's im Alter zwischen 5 und 25? –
Eine Möglichkeit, die noch nicht vorgeschlagen wurde, ist die Implementierung einer Erweiterungsmethode auf Foo mit einer Deklaration etwa wie folgt: 'GetBarsBetween (int lower, int obe);' und einfach diese Extensionsmethode zum Filtern und Abrufen der korrekten Balken verwenden ein Foo. Dann können Sie einfach alle Foo's where foo.GetBarsBetween (5, 25) .Any() 'auswählen. Dies erfordert keine zusätzliche Speicherzuordnung oder Umstrukturierung Ihrer aktuellen Objekte. Zwei Nachteile, Sie können nicht einfach vorhandenen Code verwenden, um mit den gefilterten Balken zu arbeiten, und die Rechenzeit ist etwas höher. – Polity