2015-10-14 61 views
0

我有下面的代码,这是完美的工作,但条件是只有连接表单行。如何用连接表实现多行?什么是多行连接表的等效代码?

foreach (var a in ttTableA.Where(r => r.RowMod == "U")) 
{ 
    var b = Db.TableB.FirstOrDefault(r => r.Company == callContextClient.CurrentCompany); 
    b.Field1 = a.Field1; 
} 

下面的代码工作正常,但我只是好奇,它可以通过使用单行代码作为上面的例子更好?可能是通过使用ToList()或东西来代替FirstOrDefault

foreach (var a in ttTableA.Where(r => r.RowMod == "U")) 
{ 
    foreach (var b in (from row in Db.TableB.With(LockHint .UpdLock) where row.Company == Session.CompanyID 
    select row)) 
    { 
      b.Field1 = a.Field1; 
    } 
} 

回答

1

您可以添加.ToList()到你的第二个这样的查询:

foreach (var a in ttTableA.Where(r => r.RowMod == "U")) 
{ 
    foreach (var b in (
     from row in Db.TableB.With(LockHint.UpdLock) 
     where row.Company == Session.CompanyID 
     select row).ToList()) 
    { 
     b.Field1 = a.Field1; 
    } 
} 

这意味着LINQ查询将被从数据库在一次旅行返回的所有记录到SQL数据库(所有这些都锁定)在一个IEnumerable而不是IQueryable中,这将在每个循环中单独查询。


顺便在ERP的Epicor你也应该写,而不是下面的第一行:

foreach (var a in ttTableA.Where(r => r.Updated)) 

为IceRow实现了更新,添加,删除,不变不具备的情况下和属性“U”,“A”,“D”和“”等同物具有的文化敏感性。

相关问题