首先,抱歉,如果我的问题会让您感到困惑。好吧,我对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表达式。
请你回复。谢谢。
答案 0 :(得分:1)
在客户端中没有一种好方法可以做到这一点。有一些工具可以对EF进行大规模更新,但我建议只运行一个查询来执行此操作,如果您需要这样做的话。看来你正在更新一个只是相关的字段,但实际上属于另一个实体。你不应该这样做,因为这意味着更新一个将使另一个无效。
答案 1 :(得分:0)
从架构的角度来看,Patrick提到的绝对正确。在我的理解中CompanyName
属于其他地方,除非这个实体是一个"只读视图" ...显然不是。现在,如果你不能做出重大改变,我建议你把这个繁重的处理从主线程转移到一个单独的线程......如果可以的话。
您还可以在内存中加载所有供应商和公司,而不是打开数据库连接1000次以发出查询查询。但是,再次考虑强烈将其移至单独的线程