Maison  >  Article  >  développement back-end  >  Comment filtrer les entités avec une liste d'identifiants dans Linq to Entities sans \'Contient()\' ?

Comment filtrer les entités avec une liste d'identifiants dans Linq to Entities sans \'Contient()\' ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 04:00:30841parcourir

How to Filter Entities with a List of IDs in Linq to Entities without 'Contains()'?

Linq to Entities : Alternative pour 'Contains()' à l'aide de la méthode d'extension

La méthode 'Contains()' n'est pas directement prise en charge dans Linq to Entities, posant un défi lors du filtrage des entités en fonction d'une liste d'identifiants. Pour remédier à cette limitation, une approche alternative utilisant une méthode d'extension peut être utilisée.

Solution :

La méthode d'extension 'WhereIn()' fournit une solution de contournement pour 'Contient ()' en traduisant la comparaison en une série d'expressions 'Equals()'. Cette méthode d'extension peut être implémentée comme suit :

<code class="csharp">public static IQueryable<TEntity> WhereIn<TEntity, TValue>
(
    this ObjectQuery<TEntity> query,
    Expression<Func<TEntity, TValue>> selector,
    IEnumerable<TValue> collection
)
{
    // ... implementation details omitted ...
}</code>

Utilisation :

La méthode 'WhereIn()' peut être utilisée pour filtrer des entités en fonction d'une collection de ID :

<code class="csharp">List<long?> txnIds = new List<long?>();
// Fill txnIds

var q = from t in svc.OpenTransaction
        where txnIds.WhereIn(t => t.OpenTransactionId)
        select t;</code>

Alternativement, si la collection d'identifiants est statique, elle peut être fournie directement à la méthode d'extension :

<code class="csharp">var q = context.Contacts.WhereIn(c => c.Name,
      "Contact1",
      "Contact2",
      "Contact3",
      "Contact4"
      );</code>

Remarque :

Dans les versions 4 et supérieures d'Entity Framework, la méthode « Contains() » est directement prise en charge, éliminant ainsi le besoin de la solution de contournement présentée ici.

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