C# Foreach循环只处理了几个项目

C# Foreach循环只处理了几个项目,c#,dynamics-crm-2011,C#,Dynamics Crm 2011,我正在使用C#更新dynamics crm 2011中联系人的实体记录。CRM中大约有44450个联系人处于活动状态,但下面的代码片段仅适用于500个联系人。有人能告诉我出了什么问题吗 foreach (Entity item in ec.Entities) { if (item.Attributes.Contains("expirationdate")) { string temp1 = string.Empty; DateTime date;

我正在使用C#更新dynamics crm 2011中联系人的实体记录。CRM中大约有44450个联系人处于活动状态,但下面的代码片段仅适用于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);
}

您可能认为它只在
ec.Entities
中循环,因为您计算了包含
expirationdate
的对象数,然后用for循环替换foreach,看看是否使用了500多个项。
代码:

for(int i=0;i
将代码替换为以下内容

如果仅迭代500次,则可能会出现以下原因 背后

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

我敢肯定您在实体检索方面受到限制,但解决方法是将每批500个实体分配到一个列表。

是否
ec.Entities
包含所有项目?您怎么知道它只循环500次?是否存在导致循环中断的异常?是,它包含所有项目是否所有项目都包含
expirationdate
属性?
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);
}
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);
}