Wie führt man eine In-Abfrage im Entity-Framework durch?

.net c# entity-framework linq

Frage

Wie kann ich in linq to Entities Zeilen mit Schlüsseln aus einer Liste auswählen? Etwas wie das:

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);

Ich habe versucht, die Contains- Methode zu verwenden, wie in einigen Antworten erwähnt, aber sie funktioniert nicht und wirft diese Ausnahme aus:

LINQ to Entities erkennt die Methode 'Boolean Contains [Int32] (System.Collections.Generic.IEnumerable`1 [System.Int32], Int32) "nicht. Diese Methode kann nicht in einen Speicherausdruck übersetzt werden.

Akzeptierte Antwort

Versuche dies:

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);

Bearbeiten: Ich habe einige Problemumgehungen für dieses Problem gefunden - siehe die Klausel WHERE IN. :

Das Entity Framework unterstützt derzeit keine Parameter mit Erfassungswerten (in Ihrem Beispiel 'statusesToFind'). Um diese Einschränkung zu umgehen, können Sie einen Ausdruck mit einer bestimmten Folge von Werten manuell erstellen, indem Sie die folgende Methode verwenden:


Beliebte Antwort

Ich hatte das gleiche Problem und habe das so gelöst

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);


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum