2010-10-12 33 views
0
Update TableToBeUpdated 
Set ColumnNameId = (Select MasterColumnId 
        from MasterTable where Id = @Id) 
Where ForeingKeyId = @Id 
    AND AnotherColumn = @AnotherColumn 

如何與一個select語句和使用子查詢的更新語句實現上述的更新與Linq中選擇查詢值到SQL

目前我在想什麼。

//First Select statement 
    var tableTBU = (from t in MsDataContext.TableToBeUpdated 
      where t.ForeingKeyId == <valueFromVariable> 
      select t).SingleOrDefault(); 

    //Second select statement 
    var masterIdValue = (from m in MsDataContext.MasterTable 
       where m.Id == <valueFromVariable> 
       select mod.MasterColumnId).SingleOrDefault(); 


    tableTBU.ColumnNameId = masterIdValue ; 
    tableTBU.SomeOtherColumn = "dkjsdlfs"; 
    //Some more things to be updated. 

    //UpdateStatement 
    MsDataContext.SubmitChanges(); 

回答

2

LINQ到SQL效果最好,如果你讓LINQ引擎來管理密鑰(我假定MasterTableTableToBeUpdated之間的關係是一個一對一):

using (DataContext dc = new DataContext()) 
{ 
    var objectToUpdate = dc.MasterTable.Single(a => a.Id == id).TableToBeUpdated; 

    objectToUpdate.SomeOtherColumn = "dkjsdlfs"; 
    dc.SubmitChanges(); 
} 

這也假定您已經關聯了兩個表,可以通過設計器使用關聯或通過數據庫中的外鍵關係手動關聯。

UPDATE:

既然你沒有一個現有的外鍵關係,那麼你就需要手動關聯表。根據上面的SQL語句:

using (DataContext dc = new DataContext()) 
{ 
    var objectToUpdate = dc.TableToBeUpdated 
     .Single(b => b.ForeignKeyId.Contains(dc.MasterTable.Single(a => a.Id == id).Id) 
      && b.AnotherColumn == anotherColumn); 

    objectToUpdate.SomeOtherColumn = "dkjsdlfs"; 
    dc.SubmitChanges(); 
} 
+0

我想我把問題複雜化了,因爲這樣你就感到困惑。如果您只是將T-SQL語句轉換爲LINQ,那將會很棒。我沒有指定任何外鍵或在設計器上完成任何手動映射。實際上MasterTable和TableToBeUpdated還有一對多的關係。 – IsmailS 2010-10-13 05:21:30