2015-01-30 4 views
1

Прежде всего, извините, если мой вопрос вас смутит. Ну, я все еще скалистый об этом программировании в C#.Редактировать: Как изменить этот код в LINQ-выражение

Я использую код ниже:

foreach (var schedule in schedules) 
{ 
     if(schedule.SupplierId != Guid.Empty) 
     { 
      var supplier = db.Suppliers.Find(schedule.SupplierId); 
      schedule.CompanyName = supplier.CompanyName; 
     } 
     if(schedule.CustomerId != Guid.Empty) 
     { 
      var customer = db.Customers.Find(schedule.CustomerId);  
      schedule.CompanyName= customer.CompanyName; 
     } 
} 

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

Пожалуйста, для вашего ответа. Спасибо.

+1

Вы можете обновить, когда и когда компания решит свое обновление, но независимо от того, каждая из этих компаний должна будет запустить этот код, поэтому, следовательно, время будет (если не требуется больше времени из-за вызовов отдельных методов) – Sayse

+2

@DavidBrabant, почему вы удалили часть исходного кода? – Leo

+0

Два блока были точными дубликатами. Думал, что это была ошибка. Был ли я неправ? –

ответ

1

В клиенте нет хорошего способа сделать это. Есть несколько инструментов для массового обновления EF, но я бы предложил запустить только запрос, чтобы сделать это, если вам нужно сделать это вообще. Кажется, вы обновляете поле, которое просто связано, но на самом деле принадлежит другому объекту. Вы не должны этого делать, поскольку это означает, что обновление будет оставлено другим.

0

То, что Патрик упоминает, абсолютно прав с архитектурной точки зрения. В моем понимании CompanyName принадлежит где-то еще, если только этот объект не является «только для чтения» ... что явно не так. Теперь, если вы не можете позволить себе серьезные изменения, я предлагаю вам переместить эту тяжелую обработку из основного потока в отдельный поток ... если сможете.

Вы также можете загрузить все поставщики и компании в память, а не открывать подключение к базе данных 1000 раз, чтобы выдать запрос поиска. Но, опять же, подумайте о том, чтобы переместить это в отдельный поток.