在LINQ中的一个查询中更新2个表值

时间:2010-04-26 13:35:09

标签: vb.net linq

我有2个表Table1,列[BId,Name,Amount] Table2,列为[CId,BId,ExpenseType,Expense]。 BId是Table2中的外键。

Table1中的Amount字段始终高于Table2中的Expense。我需要根据Expense的值更新Amount(增加或减少)的值,我想在LINQ中的单个查询中执行此操作。例如,如果费用必须用200更新,我会减少(否定)金额值200.如果费用减少到100,那么金额增加100。

提前感谢任何建议。

1 个答案:

答案 0 :(得分:1)

您无法使用一个查询执行更新。您甚至无法在SQL中执行此操作,更不用说在LinQ中了。你需要的是交易。 在事务中,您可以将两个表记录加载到变量中,更新它们的值并提交事务。

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
    }
}