【问题标题】:Edit : How to change this code into LINQ-expression编辑:如何将此代码更改为 LINQ 表达式
【发布时间】:2015-01-30 07:37:09
【问题描述】:

首先,对不起,如果我的问题会让你感到困惑。好吧,我仍然对 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 表达式。

请您回复。谢谢。

【问题讨论】:

  • 您可以在公司决定更新时进行更新,但无论如何,这些公司中的每一个都需要运行此代码,因此所花费的时间可能相同(如果不需要更多时间的话)由于单独的方法调用)
  • @DavidBrabant 为什么要删除部分原始代码?
  • 两个块完全相同。认为这是一个错误。我错了吗?
  • 我已经把它放回去了。大卫,它包含有关客户的信息,我怀疑 OP 正在寻找一种方法来重写它。
  • 是的。我曾是。很抱歉。

标签: c# linq loops foreach linq-expressions


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Patrick 提到的从建筑的角度来看是绝对正确的。据我了解,CompanyName 属于其他地方,除非该实体是“只读视图”……显然不是。现在,如果您无力进行重大更改,我建议您将这个繁重的处理从主线程移到一个单独的线程......如果可以的话。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-15
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      相关资源
      最近更新 更多