C# Foreach循环输出不正确

C# Foreach循环输出不正确,c#,C#,所以我为每个循环嵌套了这些,第二个循环接受第一个循环中计数的“访问”。但是,当它输出信息时,它会进行第一次访问,然后更改页面并继续通过循环打印出第一次访问的所有事件。如何让它将所有访问打印在工作表1上,然后移动到嵌套循环并打印这些结果 int r = 1; int j = 1; int cell = 0; //loop that places Visit on Sheet 1 of Excel for (int i = 1; i < visits.Count(); i++) {

所以我为每个循环嵌套了这些,第二个循环接受第一个循环中计数的“访问”。但是,当它输出信息时,它会进行第一次访问,然后更改页面并继续通过循环打印出第一次访问的所有事件。如何让它将所有访问打印在工作表1上,然后移动到嵌套循环并打印这些结果

int r = 1;
int j = 1;
int cell = 0;
//loop that places Visit on Sheet 1 of Excel
for (int i = 1; i < visits.Count(); i++)
  {
   Visit visit = visits[i];
   decimal? charges = visit.TotalCharges();
   decimal? payments = visit.TotalPayments();
   decimal? totAdj = visit.PaymentAdjustments.Where(x => x.nrv_cd.Trim() == "C01").Sum(s => s.pmt_pst_at);
   decimal? actbalance = charges - (payments + totAdj);
   CareGiver attending = visit.AttendingPhysicianCareGiver();

   workbook.AddCell(r, cell++, visit.Person.DisplayName());
   workbook.AddCell(r, cell++, visit.vst_ext_id.Trim());
   workbook.AddCell(r, cell++, visit.LosFormatted());
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ds);
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ext_id.Trim());
   workbook.AddCell(r, cell++, charges);
   workbook.AddCell(r, cell++, payments);
   workbook.AddCell(r, cell++, totAdj);
   workbook.AddCell(r, cell++, actbalance);
   r++;
   workbook.ChangeWorksheet(2);

      //when moving to this nested loop, it picks up all charge codes for that visit
      foreach (Charge c in visit.Charges)
       {
        workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
        workbook.AddCell(j, 1, c.ChargeDefinition.chg_cod_ext_id.Trim());
        j++;
       }
      //when moving to this nested loop, it picks up all adjustment codes for that visit
      foreach (PaymentAdjustment pa in visit.PaymentAdjustments)
       {
        workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
        workbook.AddCell(j, 1, pa.ChargeDefinition.chg_cod_ext_id.Trim());
        j++;
       }

        workbook.ChangeWorksheet(1);
intr=1;
int j=1;
int单元=0;
//将访问放在Excel第1页的循环
for(int i=1;ix.nrv_cd.Trim()==“C01”)。总和(s=>s.pmt_pst_at);
十进制?实际余额=费用-(付款+总额);
护理者护理=就诊。护理医师护理者();
workbook.AddCell(r,cell++,visit.Person.DisplayName());
AddCell(r,cell++,visit.vst_ext_id.Trim());
AddCell(r,cell++,visit.losformated());
workbook.AddCell(r,cell++,visit.CodeDetail.cod\u dtl\u ds);
AddCell(r,cell++,visit.CodeDetail.cod\u dtl\u ext\u id.Trim());
工作簿.AddCell(r,cell++,charges);
工作簿.AddCell(r,cell++,payments);
AddCell(r,cell++,totaj);
AddCell(r,cell++,actbalance);
r++;
工作手册.更改工作表(2);
//当移动到此嵌套循环时,它将拾取该访问的所有费用代码
foreach(访问中的费用c.费用)
{
AddCell(j,0,visit.vst_ext_id.Trim());
AddCell(j,1,c.ChargeDefinition.chg_cod_ext_id.Trim());
j++;
}
//当移动到此嵌套循环时,它将拾取该访问的所有调整代码
foreach(访问中的PaymentAdjustment pa.PaymentAdjusts)
{
AddCell(j,0,visit.vst_ext_id.Trim());
AddCell(j,1,pa.ChargeDefinition.chg_cod_ext_id.Trim());
j++;
}
工作手册.更改工作表(1);

您可以做的一件事是添加更多的“更改工作表”命令。另一件事是再次重复整个访问循环

方法1正是您所实现的,我必须假设出于某种原因,它不是您想要的。但是我确实想知道为什么……您会得到相同的结果

它具体涉及打印一次访问,然后更改页面并打印该访问的详细信息,然后更改页面并移动到外部循环的第二次迭代

方法2看起来像这样:

for (int i = 1; i < visits.Count(); i++)
{

   Visit visit = visits[i];
   decimal? charges = visit.TotalCharges();
   decimal? payments = visit.TotalPayments();
   decimal? totAdj = visit.PaymentAdjustments.Where(x => x.nrv_cd.Trim() == "C01").Sum(s => s.pmt_pst_at);
   decimal? actbalance = charges - (payments + totAdj);
   CareGiver attending = visit.AttendingPhysicianCareGiver();

   workbook.AddCell(r, cell++, visit.Person.DisplayName());
   workbook.AddCell(r, cell++, visit.vst_ext_id.Trim());
   workbook.AddCell(r, cell++, visit.LosFormatted());
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ds); 
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ext_id.Trim());
   workbook.AddCell(r, cell++, charges);
   workbook.AddCell(r, cell++, payments);
   workbook.AddCell(r, cell++, totAdj);
   workbook.AddCell(r, cell++, actbalance);
   r++;
}

//new code
workbook.ChangeWorksheet(2);
for (int i = 1; i < visits.Count(); i++)
{
    Visit visit = visits[i];
    //when moving to this nested loop, it picks up all charge codes for that visit
    foreach (Charge c in visit.Charges)
    {
      workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
      workbook.AddCell(j, 1, c.ChargeDefinition.chg_cod_ext_id.Trim());
      j++;
    }
    //when moving to this nested loop, it picks up all adjustment codes for that visit
    foreach (PaymentAdjustment pa in visit.PaymentAdjustments)
    {
      workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
      workbook.AddCell(j, 1, pa.ChargeDefinition.chg_cod_ext_id.Trim());
      j++;
    }
}
for(int i=1;ix.nrv_cd.Trim()==“C01”)。总和(s=>s.pmt_pst_at);
十进制?实际余额=费用-(付款+总额);
护理者护理=就诊。护理医师护理者();
workbook.AddCell(r,cell++,visit.Person.DisplayName());
AddCell(r,cell++,visit.vst_ext_id.Trim());
AddCell(r,cell++,visit.losformated());
workbook.AddCell(r,cell++,visit.CodeDetail.cod\u dtl\u ds);
AddCell(r,cell++,visit.CodeDetail.cod\u dtl\u ext\u id.Trim());
工作簿.AddCell(r,cell++,charges);
工作簿.AddCell(r,cell++,payments);
AddCell(r,cell++,totaj);
AddCell(r,cell++,actbalance);
r++;
}
//新代码
工作手册.更改工作表(2);
for(int i=1;i
具体来说,打印所有访问,更改页面,通过另一个打印所有详细信息的循环。只更改页面一次,但您必须通过访问循环两次


编写代码需要记住的一点是,除非您告诉它不要这样做,否则它总是按顺序执行。这包括循环和其他内容。它总是按其编写的顺序执行。如果您希望在所有访问之后打印详细信息,您必须先告诉它打印所有访问,然后再告诉它打印任何详细信息。

您希望嵌套的foreach循环进行迭代吗?这是在您进行第一个循环之后进行的吗?还是每次第一个循环读取一行时都进行迭代?@Hituptny-我想按以下顺序打印:第1页-访问1,访问2,访问3…第2页(嵌套循环的位置)每次就诊时,就诊1:代码1、就诊1:代码2、就诊2:代码1、就诊2:代码2、就诊2:代码3…依此类推。第二页上打印了每次就诊的多个代码。您能否在上述^^^中注释您的代码?移动工作簿。更改工作表(1)在for循环之外。您正在打印第一次访问的值,然后更改工作表。只有在他希望其余的访问也在第2页时,您才需要在遍历所有访问之后更改工作表。此代码的作用是打印访问、更改页面、打印详细信息,然后更改页面,然后循环。我想要的是o know就是为什么它不起作用,看起来它完全按照他说的那样做了……虽然我们也没有看到循环的结尾……我假设它位于
changesheet(1)
调用之后。这是有道理的,我认为嵌套循环使它比需要的更复杂。谢谢。