Maison  >  Article  >  développement back-end  >  Comment interroger des données efficacement en utilisant Contains() avec Linq to Entities ?

Comment interroger des données efficacement en utilisant Contains() avec Linq to Entities ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 07:12:03640parcourir

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

Requête efficace de données avec Contains() à l'aide de Linq to Entities

Une exigence courante dans l'accès aux données est de filtrer en fonction d'une liste de valeurs. La méthode 'Contains()', disponible dans de nombreux langages de programmation, simplifie cette tâche. Cependant, Linq to Entities, utilisé avec Entity Framework de Microsoft, manquait de cette fonctionnalité jusqu'à récemment.

Création d'une solution de contournement à l'aide de 'Any()'

Initialement, une tentative a été conçu pour utiliser la méthode 'Any()' comme solution de contournement :

var q = from t in svc.OpenTransaction
        where txnIds.Any<long>(tt => tt == t.OpenTransactionId)
        select t;

Cependant, cette approche a rencontré une erreur en raison de la méthode 'Any' non prise en charge.

Prise en charge de ' Contains()' dans Entity Framework 4 et versions ultérieures

Heureusement, à partir d'Entity Framework 4, la méthode 'Contains()' est nativement prise en charge. Cela signifie que le code suivant peut être utilisé pour filtrer en fonction d'une liste de valeurs :

var q = from t in svc.OpenTransaction
        where txnIds.Contains(t.OpenTransactionId)
        select t;

Utilisation d'une méthode d'extension personnalisée pour les versions EF inférieures à 4

Pour Versions EF antérieures à 4, une méthode d'extension personnalisée peut être implémentée pour fournir une solution de contournement pour « Contains() » :

public static IQueryable<TEntity> WhereIn<TEntity, TValue>
  (
    this ObjectQuery<TEntity> query,
    Expression<Func<TEntity, TValue>> selector,
    IEnumerable<TValue> collection
  )
{
// ... Implementation goes here
}

Utilisation de la méthode d'extension personnalisée

Pour utiliser la méthode d'extension, transmettez l'expression du sélecteur et la liste des valeurs sur lesquelles filtrer :

var contacts = context.Contacts.WhereIn(c => c.Name, GetContactNames());

Avec cette solution de contournement, vous pouvez filtrer efficacement les données dans les requêtes Linq to Entities à l'aide de Contains().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn