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!