void worker_DoWork(object sender, DoWorkEventArgs e) { Func <Transaction, bool> whereQuery = (Func <Transaction, bool>)e.Argument; worker.ReportProgress(1); BillingDataDataContext db = new BillingDataDataContext(); List <Transaction> transactions = db.Transactions.Where(whereQuery).ToList(); double transCount = transactions.Count; double i = 0; foreach (Transaction trans in transactions) { if (trans.ConnsignmentNo == "X10477603") { Debug.WriteLine("ABC"); } trans.AmountCharged = (decimal)UtilityClass.getCost(trans.CustCode, trans.BilledWeight ?? 0, trans.Destination, trans.Type.Trim(), trans.DOX); if (trans.Insurance != null) { trans.AmountCharged = trans.AmountCharged + (decimal)trans.Insurance; } worker.ReportProgress((int)((i / transCount) * 94 + 1)); i++; } ChangeSet changeSet = db.GetChangeSet(); db.SubmitChanges(); worker.ReportProgress(100); e.Result = "Completed for " + ((int)transCount).ToString() + " transactions"; }