Effiziente Datenabfrage mit Contains() unter Verwendung von Linq to Entities
Eine häufige Anforderung beim Datenzugriff ist das Filtern basierend auf einer Liste von Werte. Die in vielen Programmiersprachen verfügbare Methode „Contains()“ vereinfacht diese Aufgabe. Allerdings fehlte Linq to Entities, das mit dem Entity Framework von Microsoft verwendet wurde, bis vor Kurzem diese Funktionalität.
Erstellen eines Workarounds mit „Any()“
Zunächst war es ein Versuch Als Problemumgehung wurde die Methode „Any()“ verwendet:
var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t;
Bei diesem Ansatz ist jedoch ein Fehler aufgetreten, da die Methode „Any“ nicht unterstützt wird.
Unterstützt ' „Contains()“ in Entity Framework 4 und höher
Zufälligerweise wird ab Entity Framework 4 die Methode „Contains()“ nativ unterstützt. Dies bedeutet, dass der folgende Code zum Filtern basierend auf einer Liste von Werten verwendet werden kann:
var q = from t in svc.OpenTransaction where txnIds.Contains(t.OpenTransactionId) select t;
Verwenden einer benutzerdefinierten Erweiterungsmethode für EF-Versionen unter 4
Für In EF-Versionen vor 4 kann eine benutzerdefinierte Erweiterungsmethode implementiert werden, um eine Problemumgehung für „Contains()“ bereitzustellen:
public static IQueryable<TEntity> WhereIn<TEntity, TValue> ( this ObjectQuery<TEntity> query, Expression<Func<TEntity, TValue>> selector, IEnumerable<TValue> collection ) { // ... Implementation goes here }
Verwendung der benutzerdefinierten Erweiterungsmethode
Um die Erweiterungsmethode zu verwenden, übergeben Sie den Selektorausdruck und die Liste der Werte, nach denen gefiltert werden soll:
var contacts = context.Contacts.WhereIn(c => c.Name, GetContactNames());
Mit dieser Problemumgehung können Sie Daten in Linq to Entities-Abfragen mithilfe von Contains() effektiv filtern.
Das obige ist der detaillierte Inhalt vonWie frage ich mithilfe von Contains() mit Linq to Entities effizient Daten ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!