Solution de contournement pour l'implémentation de « Contains() » à l'aide de Linq to Entities
La méthode « Contains() » n'est pas intrinsèquement prise en charge par Linq to Entities. Entités, ce qui pose un défi lorsque l'on travaille avec des collections d'ID dans une requête. Nous présentons ici une solution réalisable pour remédier à cette limitation.
Solution :
Pour remplacer la méthode 'Contains()' non prise en charge, nous exploitons la méthode 'Any() ' à sa place :
var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t;
Cependant, cette modification ne résout pas le problème de la non prise en charge de 'Any()' dans le contexte de Linq to Entities. Pour surmonter ce problème, nous proposons une approche alternative :
public static IQueryable<TEntity> WhereIn<TEntity, TValue> ( this ObjectQuery<TEntity> query, Expression<Func<TEntity, TValue>> selector, IEnumerable<TValue> collection )
Cette méthode d'extension vous permet d'appliquer un filtre à une gamme de types et de propriétés d'entités.
Exemple d'utilisation :
Le code suivant montre comment utiliser la méthode « WhereIn() » :
using (MyObjectContext context = new MyObjectContext()) { //Using method 1 - collection provided as collection var contacts1 = context.Contacts.WhereIn(c => c.Name, GetContactNames()); //Using method 2 - collection provided statically var contacts2 = context.Contacts.WhereIn(c => c.Name, "Contact1", "Contact2", "Contact3", "Contact4" ); }
En employant cette solution, vous bénéficiez de la fonctionnalité « Contains() » tout en travaillant avec Linq to Entities, vous offrant une plus grande flexibilité dans vos requêtes.
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!