2016-06-02 12 views
-1

Angenommen, ich habe eine Bestellposition Tabelle:Entity Framework 'Massen' Finden

CREATE TABLE OrderItem 
(
    orderId INT, 
    orderItemId INT, 
    ... 
    CONSTRAINT orderItem_pk PRIMARY KEY (orderId, orderItemId)); 

In meinem dbContext, ich habe Entität eine entsprechende OrderItem.

nun in meiner Anwendung habe ich eine Sammlung von frei stehenden OrderItem Einheiten:

var orderItems = new List<OrderItem>(){...}; 

Ich mag würde, um zu bestimmen, welche diese orderItems bereits in der Datenbank vorhanden ist. Wie kann ich dies mit einer Reise in die Datenbank überprüfen? Beachten Sie, dass der Schlüssel der Entität zusammengesetzt ist.

(Mein Ziel ist es, ‚Upsert‘ die orderItems.)

Antwort

0

dieses

var orderItems = new List<OrderItem>(){...}; 
var inDatabase = db.Orders.Where(o => orderItems.Contains(o.OrderId)).ToList(); 

Contains zu IN Aussage übersetzt wird helfen könnte und diese Liste (Orderitem) würde auf Ihre Anfrage angebracht werden was zu nur 1 Reise in die Datenbank führt.

Für den Verbund zu arbeiten, können Sie so etwas wie diese

var orderItems = new List<OrderItem>(){...}; 
var result= 
     from a in orderItems 
     join b in db.Orders on new { a.field1, a.field2 } equals new { b.field1, b.field2 } 
     select new { B = b }; 
+0

Wie ich in meiner Frage hingewiesen, könnten versuchen, mein Schlüssel ist zusammengesetzt; Mit anderen Worten, ein Nachschlagen erfordert eine Überprüfung gegen "OrderId" und "OrderItemId". –

+0

Dann müssen Sie eine Verbindung zwischen Ihrer lokalen Liste und der Datenbank machen ... aber ich bin mir nicht sicher, ob das zu langsam sein wird. – Rafa

+0

AFAIK, Sie können nicht zu einer lokalen Sammlung beitreten. –