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