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

时间:2016-11-04 10:31:42

标签: c# linq

我有2个TextBox用于输入2 id和一个TextBox用于输入amount.I想要将此金额添加到我的表中具有第一个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;
        }

但只是更新第一行。 我该怎么办?

3 个答案:

答案 0 :(得分:1)

您需要else与第二个循环中的if一起使用。否则,money总是被减去。

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

答案 1 :(得分:0)

根据帐户类型,只需获得两个帐户类型的1个大列表,然后根据帐户类型进行减法或添加,性能稍微好一点:

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

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

答案 2 :(得分:0)

如果要保存数据库中的更改,应创建此代码:

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

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

this.Refresh();