Foreach 循环只经过几个项目

本文关键字:几个 项目 循环 经过 Foreach | 更新日期: 2023-09-27 18:32:48

我正在使用 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);
}

Foreach 循环只经过几个项目

将代码替换为以下内容

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 次,那么以下原因可能是 这背后

  • 要么 检索多个 返回您只有 500 条记录,只有当可以同时检索的最大记录时才有可能 在 CRM 设置中,时间可能设置为 500。

您可能认为它只循环遍历ec.Entities,因为您计算包含expirationdate的对象数

foreach替换为for循环,并查看是否使用了超过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);
}

我相当确定您在实体检索方面受到限制,但一种方法是将每批 500 个分配给一个列表。