Dynamics CRM 2011 LinQ查找新记录

时间:2013-07-03 12:42:53

标签: linq dynamics-crm-2011

我在List中有一堆自定义实体记录(来自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
        }

1 个答案:

答案 0 :(得分:1)

您当前的方法似乎有点倒退(从CRM中获取所有内容,然后将其与您在本地的内容进行比较),但这可能不会太糟糕,具体取决于您拥有多少帐户,即&lt; 5000。

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

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