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
Barbara StreisandOriginal
2024-10-29 07:12:03704Durchsuche

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;

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!

Stellungnahme:
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