2013-07-03 239 views
0

我在列表中有一堆自定義實體記錄(來自csv文件)。
檢查哪些記錄是新的並創建那些記錄的最佳方法是什麼?

在這種情況下,相等性檢查基於單個文本字段,但我需要在其他地方執行相同性檢查基於查找和2個文本字段的相同事情。
Dynamics CRM 2011 LinQ查找新記錄

爲了討論可以說我將帳戶記錄,這是我目前有:

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

您當前的方法似乎有點倒退(搞定一切了CRM的,然後把它比作什麼你有本地的),但它可能不會太糟糕,取決於你有多少個帳戶,即< 5000.

舉個簡單的例子,你應該可以申請where in聲明。

加入多個領域有點棘手。如果您正在運行CRM> R12,那麼您應該可以使用ExecuteMultipleRequests,爲列表中的每個項目創建一個單獨的請求,然後對它們進行批處理,因此有一個「通過線路連接」到CRM的大型請求。