使用linq更新特定记录的一个字段

本文关键字:一个 字段 更新 linq 记录 使用 | 更新日期: 2023-09-27 18:16:13

我有两个用于输入2 id的TextBox和一个用于输入amount的TextBox。我想把这个金额加到我的第一个id表中的金额上,减去我的第二个id表的金额。这是我的代码:

int money = Int16.Parse(textBox3.Text);
        List<account> q_to = (from p in context.accounts where p.id.ToString() == textBox2.Text select p).ToList();
        foreach (account p in q_to)
        {
            p.amount = p.amount + money;
        }

        List<account> q_from = (from p in context.accounts where p.id.ToString() == textBox1.Text select p).ToList();
        foreach (account p in q_from)
        {
            if (p.amount < money)
            {
                MessageBox.Show("Account balance is not enough");
            }
            p.amount = p.amount - money;
        }

但只需更新第一行即可。我该怎么办?

使用linq更新特定记录的一个字段

您需要一个else来处理第二个循环中的if。否则,CCD_ 3总是被减去。

此外,如果可以从第二个帐户中减去money,则只应将其添加到第一个帐户。现在你总是在添加它。我不想成为这家"银行"的负责人。。。。

在性能方面可能会稍好一些,只需为两种帐户类型获得一个大列表,然后根据帐户类型进行减法或加法:

int money = Int16.Parse(textBox3.Text);
List<account> q_accounts = (from p in context.accounts 
                            where p.id.ToString() == textBox2.Text ||
                                  p.id.ToString() == textBox1.Text
                            select p).ToList();
foreach (account p in q_accounts)
{
    if (p.id.ToString() == textBox2.Text)
    {
        p.amount = p.amount + money;
    }
    else
    {
        if (p.amount < money)
        {
            MessageBox.Show("Account balance is not enough");
        }
        else
        {
            p.amount = p.amount - money;
        }
    }
}

这将阻止您两次浏览帐户列表以提取两种帐户类型。

如果您想在数据库中保存更改,应该创建此代码:

 try
        {
            context.SubmitChanges();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            // Provide for exceptions.
        }

如果你想查看数据库的更新,你应该刷新表单:

this.Refresh();