2016-06-02 5 views
-1

Предположим, у меня есть пункт заказ таблицы:Entity Framework 'Bulk' Найти

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

В моем dbContext я соответствующий OrderItem сущность.

Теперь в моем приложении у меня есть коллекция отдельных OrderItem лиц:

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

я хотел бы, чтобы определить, какой из этих orderItems уже существует в базе данных. Как я могу проверить это с одной поездкой в ​​базу данных? Обратите внимание, что ключ объекта является составным.

(Моя конечная цель состоит в том, чтобы 'upsert' The orderItems.)

ответ

0

это может помочь

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

Contains будут переведены на IN заявление и в этом списке (ТоварыЗаказа) будет приложен к вашему запросу в результате чего всего одна поездка в базу данных.

Для композита на работу, вы можете попробовать что-то вроде этого

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

Как я указывал в моем вопросе, мой ключ является составным; другими словами, поиск требует проверки на 'orderId', а также' orderItemId'. –

+0

Тогда вам нужно будет сделать соединение между вашим локальным списком и базой данных ... но я не уверен, что это будет слишком медленно. – Rafa

+0

AFAIK, вы не можете присоединиться к локальной коллекции. –

Смежные вопросы