Maison > développement back-end > C++ > 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
Libérer: 2024-11-02 04:00:30
original
940 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal