2010-04-26 4 views
0

J'ai 2 tables Table1 avec des colonnes [BId, Nom, Quantité] Table2 avec des colonnes [CId, BId, ExpenseType, Expense]. BId Est la clé étrangère dans Table2.Mettre à jour 2 valeurs de table dans une requête dans LINQ

Le champ Montant dans Table1 est toujours supérieur à Expense dans Table2. J'ai besoin de mettre à jour les valeurs de montant (augmenter ou diminuer) basé sur la valeur de dépenses et je veux le faire dans une seule requête dans LINQ. Par exemple, si la dépense doit être mise à jour avec 200, je diminuerais (annuler) la valeur Montant avec 200. Si la dépense est réduite à 100, le montant est augmenté de 100.

Merci d'avance pour toute suggestion.

Répondre

1

Vous ne pouvez pas effectuer de mises à jour avec une requête. Vous ne pouvez même pas le faire en SQL, et encore moins en LinQ. Ce dont vous avez besoin ici, c'est une transaction. Dans la transaction, vous pouvez charger les deux enregistrements de table dans des variables, mettre à jour leurs valeurs et valider la transaction.

using (var transaction = new TransactionScope()) { 
    try { 
     record1 = (from r in myDataContext.Table1s where r.BId == myBid select r).FirstOrDefault(); 
     record2 = (from r in myDataContext.Table2s where r.BId == myBid select r).FirstOrDefault(); 

     // Perform your record updates here 
     var oldExpense = record2.Expense; 
     record2.Expense = newExpense; 
     record1.Amount += (newExpense - oldExpense); 

     myDataContext.SubmitChanges(); // if an exception occurs here, the transaction is aborted 

     transaction.Complete(); // commits the transaction 

    } catch (Exception ex) { 
     // TODO: Exception handling 
    } 
} 
+0

Merci beaucoup, exactement ce dont j'avais besoin – fireBand

Questions connexes