Foreach循环只经过几个项目

时间:2016-02-01 13:40:34

标签: c# dynamics-crm-2011

我正在使用C#更新实体记录,说明动态crm 2011中的联系人。在CRM中有大约44,450个联系人处于活动状态但是下面的代码片段只有500个。有人可以让我知道它出了什么问题。

foreach (Entity item in ec.Entities)
{

    if (item.Attributes.Contains("expirationdate"))
    {
        string temp1 = string.Empty;
        DateTime date;
        date = Convert.ToDateTime(item.Attributes["expirationdate"]);
        temp1 = date.Date.ToString("d");
        item.Attributes["expirationdate_hidden"] = temp1;  
    }
    service.Update(item);
}

4 个答案:

答案 0 :(得分:2)

  

用以下

替换代码
foreach (Entity item in ec.Entities)
{

    if (item.Attributes.Contains("expirationdate"))
    {
        string temp1 = string.Empty;
        DateTime date;
        date = Convert.ToDateTime(item.Attributes["expirationdate"]);
        temp1 = date.Date.ToString("d");
        item.Attributes["expirationdate_hidden"] = temp1;  
    }
    service.Update(item);
}
  
    

如果仅迭代500次,则可以是以下原因     在这背后

  
     
      
  • 只有在可以同时检索的最大记录时,retrievemultiple才会返回500条记录   在crm设置中,time可以设置为500。
  •   

答案 1 :(得分:0)

您可能认为它只会遍历ec.Entities,因为您会计算包含expirationdate

的对象数量

答案 2 :(得分:0)

用for循环替换foreach,看看是否使用了500多个项目 代码:

for(int i = 0; i < ec.Entities.Length; i++) 
{
     Entity item = ec.Entities[i];
     if (item.Attributes.Contains("expirationdate"))
     {
        string temp1 = string.Empty;
        DateTime date;
        date = Convert.ToDateTime(item.Attributes["expirationdate"]);
        temp1 = date.Date.ToString("d");
        item.Attributes["expirationdate_hidden"] = temp1;  
     }
     service.Update(item);
}

答案 3 :(得分:0)

我相当确定您的实体检索受到限制,但是这样做可以将每批500个分配给一个列表。