Solution de contournement de la fonction Contains() utilisant Linq to Entities
Question :
Comment utiliser la fonction Contains() dans les requêtes Linq to Entities, malgré son manque de support ?
Réponse :
Mise à jour : Depuis Entity Framework ( EF) version 4 et ultérieure, Contains() est directement pris en charge.
Pour les versions antérieures d'EF, une solution de contournement est nécessaire :
Méthode d'extension personnalisée pour Contains()
Créez la méthode d'extension suivante :
<code class="csharp">public static IQueryable<TEntity> WhereIn<TEntity, TValue>( this ObjectQuery<TEntity> query, Expression<Func<TEntity, TValue>> selector, IEnumerable<TValue> collection) { // ... (implementation remains the same as in the provided code) }</code>
Version de collection statique facultative
En option, vous pouvez créer une version qui permet une collection statique comme input :
<code class="csharp">public static IQueryable<TEntity> WhereIn<TEntity, TValue>( this ObjectQuery<TEntity> query, Expression<Func<TEntity, TValue>> selector, params TValue[] collection) { return WhereIn(query, selector, (IEnumerable<TValue>)collection); }</code>
Utilisation :
Avec cette méthode d'extension, vous pouvez utiliser Contains() dans vos requêtes Linq to Entities comme suit :
<code class="csharp">public static void Main() { 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"); } }</code>
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!