我在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
}
答案 0 :(得分:1)
您当前的方法似乎有点倒退(从CRM中获取所有内容,然后将其与您在本地的内容进行比较),但这可能不会太糟糕,具体取决于您拥有多少帐户,即&lt; 5000。
对于您的简单示例,您应该能够应用where in语句。
加入多个领域有点棘手。如果您正在运行CRM&gt; R12,您应该能够使用ExecuteMultipleRequests,为列表中的每个项目创建一个单独的请求,然后将它们全部批处理,因此有一个大的请求“通过线路”到CRM。