Comment faire une requête "in" dans un framework d'entité?

.net c# entity-framework linq

Question

Comment faire une sélection dans linq to entités pour sélectionner des lignes avec des clés dans une liste? Quelque chose comme ça:

var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders 
              where (order.Key in orderKeys) 
              select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);

J'ai essayé d'utiliser la méthode Contains comme mentionné dans certaines réponses, mais cela ne fonctionne pas et lève cette exception:

LINQ to Entities ne reconnaît pas la méthode 'Boolean Contains [Int32] (System.Collections.Generic.IEnumerable`1 [System.Int32], Int32)' et cette méthode ne peut pas être traduite en expression de magasin.

Réponse acceptée

Essaye ça:

var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders 
              where orderKeys.Contains(order.Key);
              select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);

Edit: J'ai trouvé des solutions de contournement à ce problème - veuillez consulter la clause WHERE IN? :

Actuellement, Entity Framework ne prend pas en charge les paramètres de valeur de collection ("statusesToFind" dans votre exemple). Pour contourner cette restriction, vous pouvez construire manuellement une expression à partir d'une séquence de valeurs à l'aide de la méthode d'utilitaire suivante:


Réponse populaire

J'ai eu le même problème et j'ai résolu comme ça

var orderKeys = new int[] { 1, 12, 306, 284, 50047};
var orders = (from order in context.Orders 
              where (orderKeys.Contains(order.Key)) 
              select order).ToList();
Assert.AreEqual(orderKeys.Count, orders.Count);


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi