Heim > Backend-Entwicklung > C++ > Wie frage ich mithilfe von Contains() mit Linq to Entities effizient Daten ab?

Wie frage ich mithilfe von Contains() mit Linq to Entities effizient Daten ab?

Barbara Streisand
Freigeben: 2024-10-29 07:12:03
Original
703 Leute haben es durchsucht

How Do I Query for Data Efficiently Using Contains() with Linq to Entities?

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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());
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage