离开循环时出现ForEach错误

时间:2013-02-20 16:28:36

标签: c#

我有一个For循环使用linq从Visit表中获取信息。它与另一个嵌套对于每个获取名称的循环在第一列中列出:

Caregiver | week1 | week2|....
__________|_______|______|....
John Smith|   2   |   3  |....
Mary Jones|   0   |   1  |....

持续9周,并在嵌套循环中获取“访问”计数。我相信当我离开内循环时,当它到达外循环中的最后一个看护者时会给我一个NULL错误,并且在下周(第2周)从最上一行再次出现问题。

在根据我的Linq“访问次数”查询“访问”表之前,我在Select语句中收到 InvalidOperationException 。我该怎么做才能解决这个问题?

编辑:以下是错误的图片:http://i.imgur.com/yztNLR3.png

var phs = from cg in Context.CareGivers
          join cgg in Context.CareGiverGroups on cg.car_gvr_int_id equals cgg.car_gvr_int_id
          join o in Context.Organizations on cgg.org_int_id equals o.org_int_id
          where cg.row_sta_cd.Trim() == "A"
          && cgg.alt_phy_id != null
          && cgg.alt_phy_id.Trim() != String.Empty
          && o.cli_acc_fg.Trim() == "Y"
          && o.org_int_id == 1468461
          select cg;

int r = 1;
int s = 1;

for (int i = 0; i < 9; i++)
   {
     start = start.AddDays(i * -7);
     end = start.AddDays(7);

     foreach (var cg in phs)
             {
             // grab the correct exception, this will allow us to figure out where the issue might be
              var visits = cg.CareGiverFunction.First(cgf => cgf.CodeDetail.cod_dtl_ds.Trim() == "Family Physician").VisitCareGiver.Select(vcg => vcg.Visit).AsQueryable();
              visits = visits.Where(v => v.adm_ts >= start && v.adm_ts < end
                       && (v.CodeDetail.cod_dtl_ext_id.Trim() == "I" || v.CodeDetail.cod_dtl_ext_id.Trim() == "V")
                       && v.VisitStatusCdCodeDetail.cod_dtl_ext_id.Trim() != "CANCEL");


               int counter = visits.Count();
               String phys = cg.Person.DisplayName();

               workbook.AddCell(r, 0, phys);
               workbook.AddCell(r, s, counter);
               r++;

              }
              s++;

    }

2 个答案:

答案 0 :(得分:0)

cg.CareGiverFunction.First()可能没有返回结果,这意味着您在该行上的其余代码没有任何数据可供比较。

Jon Skeet回答了一个类似的问题,我会引导你到他的帖子,因为我怀疑我能否比他更好地回答:see here

答案 1 :(得分:0)

.Select语句看起来正确。什么不是start = start.AddDays(i * -7)。我想你想要的是start = start.AddDays(-7)。除非每次在循环的顶部重新初始化(这可能也适用于s),否则您首先要回溯7天,然后再回溯14次,然后再回溯21次,然后再回复28次。也许您正在运行查询返回的数据的开头?