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

Comment atteindre l'ci-dessus avec une instruction select et une déclaration de mise à jour avec une sous-requête?Mise à jour avec la valeur d'une requête de sélection dans LINQ to SQL

Actuellement ce que je pense est.

//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(); 

Répondre

2

fonctionne LINQ to SQL mieux si vous permettez le moteur LINQ pour gérer les clés (je présume que la relation entre MasterTable et TableToBeUpdated est un à un):

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

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

Cela suppose également que vous avez lié les deux tables, soit manuellement via le concepteur à l'aide d'une association ou via une relation de clé étrangère dans la base de données.

MISE À JOUR:

Puisque vous ne disposez pas d'une relation de clé étrangère existante, vous devez relier les tables manuellement. Basé sur la déclaration SQL ci-dessus:

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

Je pense que j'ai compliqué la question et vous avez confondu à cause de cela. Ce serait génial si vous pouvez simplement convertir l'instruction T-SQL à LINQ. Je n'ai aucune clé étrangère spécifiée ou aucun mappage effectué manuellement sur le concepteur. Toujours en réalité MasterTable et TableToBeUpdated ont une relation à plusieurs. – IsmailS

Questions connexes