0

我在列表中有一堆自定义实体记录(来自 csv 文件)。
检查哪些记录是新记录并创建新记录的最佳方法是什么?

在这种情况下,相等性检查基于单个文本字段,但我需要在其他地方做同样的事情,其中​​相等性检查基于查找和 2 个文本字段。

为了争论,假设我正在插入帐户记录,这就是我目前拥有的:

    private void CreateAccounts()
    {
        var list = this.GetAccounts(); // get the list of Accounts, some may be new
        IEnumerable<string> existingAccounts = linq.AccountSet.Select(account => account.AccountNumber); // get all Account numbers in CRM, linq is a serviceContextName variable
        var newAccounts = list.Where(account => !existingAccounts.Contains(account.AccountNumber)); // Account numbers not in CRM
        foreach (var accountNumber in newAccounts) // go through the new list again and get all the Account info
        {
            var account = newAccounts.Where(newAccount => newAccount.AccountNumber.Equals(accountNumber)).FirstOrDefault();
            service.Create(account);
        }
    }

有一个更好的方法吗?
我似乎在列表中迭代了太多次,但它一定比多次查询 CRM 更好:

foreach (var account in list) 
        {
            // is this Account already in CRM
            // if not create the Account
        }
4

1 回答 1

1

您当前的方法似乎有点倒退(从 CRM 中获取所有内容,然后将其与您在本地拥有的内容进行比较),但根据您拥有的帐户数量(即 < 5000),它可能不会太糟糕。

对于您的简单示例,您应该能够应用where in语句。

加入多个领域有点棘手。如果您正在运行 CRM > R12,您应该能够使用ExecuteMultipleRequests,为列表中的每个项目创建一个单独的请求,然后将它们全部批处理,因此对 CRM 有一个“在线”的大请求。

于 2013-07-03T13:03:56.453 回答