编辑:如何将此代码更改为LINQ表达式

时间:2015-01-30 07:37:10

标签: c# linq loops foreach linq-expressions

首先,抱歉,如果我的问题会让您感到困惑。好吧,我对c#中的编程仍然很不满意。

我正在使用以下代码:

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表达式。

请你回复。谢谢。

2 个答案:

答案 0 :(得分:1)

在客户端中没有一种好方法可以做到这一点。有一些工具可以对EF进行大规模更新,但我建议只运行一个查询来执行此操作,如果您需要这样做的话。看来你正在更新一个只是相关的字段,但实际上属于另一个实体。你不应该这样做,因为这意味着更新一个将使另一个无效。

答案 1 :(得分:0)

从架构的角度来看,Patrick提到的绝对正确。在我的理解中CompanyName属于其他地方,除非这个实体是一个"只读视图" ...显然不是。现在,如果你不能做出重大改变,我建议你把这个繁重的处理从主线程转移到一个单独的线程......如果可以的话。

您还可以在内存中加载所有供应商和公司,而不是打开数据库连接1000次以发出查询查询。但是,再次考虑强烈将其移至单独的线程