gpt4 book ai didi

c# - 如何从 Foreach 循环中的 IList 更新记录?

转载 作者:行者123 更新时间:2023-11-30 12:52:03 24 4
gpt4 key购买 nike

我的 Controller 正在传递一个列表,然后我需要遍历该列表并更新数据库中列表中的每条记录。我将 ASP.NET MVC 与使用 Linq to Sql 的存储库模式一起使用。下面的代码是我的保存方法,它需要向发票表添加一条记录,然后从数据库更新作业表中的适用作业。

public void SaveInvoice(Invoice invoice,  IList<InvoiceJob> invoiceJobs)
{
invoiceTable.InsertOnSubmit(invoice);
invoiceTable.Context.SubmitChanges();

foreach (InvoiceJob j in invoiceJobs)
{
var jobUpdate = invoiceJobTable.Where(x => x.JobID == j.JobID).Single();
jobUpdate.InvoiceRef = invoice.InvoiceID.ToString();
invoiceJobTable.GetOriginalEntityState(jobUpdate);
invoiceJobTable.Context.Refresh(RefreshMode.KeepCurrentValues, jobUpdate);
invoiceJobTable.Context.SubmitChanges();
}
}

**我已将代码剥离到问题区域。

此代码不起作用,没有工作记录更新,但发票表更新正常。不会抛出任何错误,并且 invoiceJobs IList 绝对不为空。如果我通过删除 foreach 循环并手动指定要更新的 JobId 来更改代码,它可以正常工作。以下作品:

public void SaveInvoice(Invoice invoice,  IList<InvoiceJob> invoiceJobs)
{
invoiceTable.InsertOnSubmit(invoice);
invoiceTable.Context.SubmitChanges();

var jobUpdate = invoiceJobTable.Where(x => x.JobID == 10000).Single();
jobUpdate.InvoiceRef = invoice.InvoiceID.ToString();
invoiceJobTable.GetOriginalEntityState(jobUpdate);
invoiceJobTable.Context.Refresh(RefreshMode.KeepCurrentValues, jobUpdate);
invoiceJobTable.Context.SubmitChanges();
}

我根本无法让 foreach 循环工作。有谁知道我在这里做错了什么?

最佳答案

看起来这个问题最有可能的原因是 invokeJobs 集合是一个空集合。也就是说它没有元素,因此 foreach 循环实际上什么都不做。

您可以通过将以下内容添加到方法的顶部来验证这一点(仅用于调试目的)

if (invoiceJobs.Count == 0) {
throw new ArgumentException("It's an empty list");
}

关于c# - 如何从 Foreach 循环中的 IList 更新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com