C# ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updat

C# ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updat,c#,dynamics-crm,crm,microsoft-dynamics,faultexception,C#,Dynamics Crm,Crm,Microsoft Dynamics,Faultexception,ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updateContent.Attributes.Add(“primarycontactid”,新的EntityReference(“contact”,substanceContact.GetAttributeValue(“primarycontacti

ains(“新会员”)和下属账户。包含(“新会员”) updateContent.Attributes.Add(“new_membership”,substanceAccount.Attributes[“new_membership]”); //updateContent.Attributes.Add(“primarycontactid”,新的EntityReference(“contact”,substanceContact.GetAttributeValue(“primarycontactid”).Id)); //如果(!masterAccount.Contains(“parentaccountid”)&次级account.Contains(“parentaccountid”)) //updateContent.Attributes.Add(“parentaccountid”,subjectAccount.Attributes[“parentaccountid”]); 如果(!masterAccount.Contains(“新首字母缩写”)&&substanaccount.Contains(“新首字母缩写”)) updateContent.Attributes.Add(“new_首字母缩略词”,substanceAccount.Attributes[“new_首字母缩略词]); 如果(!masterAccount.Contains(“新类别”)和&subsideraccount.Contains(“新类别”)) updateContent.Attributes.Add(“新类别”,substanceAccount.Attributes[“新类别”]); 如果(!masterAccount.Contains(“new_sortname”)和&substanaccount.Contains(“new_sortname”)) updateContent.Attributes.Add(“new_sortname”,substanceAccount.Attributes[“new_sortname”]); 如果(!masterAccount.Contains(“新成员类型”)和&substanaccount.Contains(“新成员类型”)) updateContent.Attributes.Add(“new_membertype”,substanceAccount.Attributes[“new_membertype]”); 如果(!masterAccount.Contains(“新基础类型”)和&substanaccount.Contains(“新基础类型”)) updateContent.Attributes.Add(“new_foundationtype”,substanceAccount.Attributes[“new_foundationtype”]); 如果(!masterAccount.Contains(“新焦点区域”)&次级account.Contains(“新焦点区域”)) updateContent.Attributes.Add(“new_focusrea”,substanceAccount.Attributes[“new_focusrea”]); 如果(!masterAccount.Contains(“new_focusrea2”)&次级account.Contains(“new_focusrea2”)) updateContent.Attributes.Add(“new_focusrea2”,substanceAccount.Attributes[“new_focusrea2]”); 如果(!masterAccount.Contains(“new_focusrea3”)&次级account.Contains(“new_focusrea3”)) updateContent.Attributes.Add(“new_focusrea3”,substanceAccount.Attributes[“new_focusrea3]”); 如果(!masterAccount.Contains(“new_100aging”)&次级account.Contains(“new_100aging”)) updateContent.Attributes.Add(“new_100aging”,substanceAccount.Attributes[“new_100aging”]); 如果(!masterAccount.Contains(“新成员”)和&subsideraccount.Contains(“新成员”)) updateContent.Attributes.Add(“new_isamber”,substanceAccount.Attributes[“new_isamber]”); //联络资料组 如果(!masterAccount.Contains(“address1_name”)&次级account.Contains(“address1_name”)) updateContent.Attributes.Add(“address1_name”,substanceAccount.Attributes[“address1_name]”); 如果(!masterAccount.Contains(“address1_composite”)&次级account.Contains(“address1_composite”)) updateContent.Attributes.Add(“address1_composite”,substanceAccount.Attributes[“address1_composite”]); 如果(!masterAccount.Contains(“电话1”)和&substanaccount.Contains(“电话1”)) updateContent.Attributes.Add(“电话1”,substanceAccount.Attributes[“电话1”]); 如果(!masterAccount.Contains(“websiteurl”)&次级account.Contains(“websiteurl”)) updateContent.Attributes.Add(“websiteurl”,substanceAccount.Attributes[“websiteurl”]); 如果(!masterAccount.Contains(“emailaddress1”)&次级account.Contains(“emailaddress1”)) updateContent.Attributes.Add(“emailaddress1”,substanceAccount.Attributes[“emailaddress1”]); //详细信息选项卡 //联系人首选项部分 如果(!masterAccount.Contains(“preferredcontactmethodcode”)&次级account.Contains(“preferredcontactmethodcode”)) updateContent.Attributes.Add(“preferredcontactmethodcode”,substanceAccount.Attributes[“preferredcontactmethodcode]”); 如果(!masterAccount.Contains(“donotphone”)&次级account.Contains(“donotphone”)) updateContent.Attributes.Add(“donotphone”,substanceAccount.Attributes[“donotphone”]); 如果(!masterAccount.Contains(“donotpostalmail”)&次级account.Contains(“donotpostalmail”)) updateContent.Attributes.Add(“donotpostalmail”,substanceAccount.Attributes[“donotpostalmail”]); //市场部 如果(!masterAccount.Contains(“donotsendmm”)&次级account.Contains(“donotsendmm”)) updateContent.Attributes.Add(“donotsendmm”,substanceAccount.Attributes[“donotsendmm”]); 如果(!masterAccount.Contains(“emailaddress1”)&次级account.Contains(“emailaddress1”)) updateContent.Attributes.Add(“emailaddress1”,substanceAccount.Attributes[“emailaddress1”]); 如果(!masterAccount.Contains(“传真”)和&substanaccount.Contains(“传真”)) updateContent.Attributes.Add(“fax”,substanceAccount.Attributes[“fax”]); //说明部分 如果(!masterAccount.Contains(“preferredcontactmethodcode”)&次级account.Contains(“preferredcontactmethodcode”)) updateContent.Attributes.Add(“preferredcontactmethodcode”,substanceAccount.Attributes[“preferredcontactmethodcode]”); //联络科 如果(!masterAccount.Contains(“新格兰特合同”)和&substanaccount.Contains(“新格兰特合同”)) updateContent.Attributes
  if (!masterAccount.Contains("new_membership") 
      && subOrdinateAccount.Contains("new_membership"))
  {
      updateContent.Attributes.Add("new_membership", subOrdinateAccount.Attributes["new_membership"]);
  }
MergeResponse mergeRes = (MergeResponse)xrm.Execute(merge);
using System;
using System.Data.Entity;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Xml.Linq;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.Query;
using Xrm;
using Microsoft.Crm.Sdk.Messages;
using System.Threading;

namespace Duplicate_Account_Merge
{
class Program
{
    static void Main(string[] args)
    {
        XrmServiceContext xrm = new XrmServiceContext("Xrm");
        Guid masterAccountId;
        Guid subOrdinateAccountId;


        //Create the target for the request.        
        EntityReference target = new EntityReference();


        // Query for Accounts


        var accounts = (from a in xrm.AccountSet.ToList()
                        where a.StateCode != 1 && a.Name != null
                        group a by a.Name into g
                        where g.Count() > 1
                        from a2 in xrm.AccountSet.ToList()
                        where a2.StateCode != 1
                        where a2.Name == g.Key
                        orderby a2.Name, a2.CreatedOn descending
                        select new
                        {
                            a2.Name,
                            //a2.LastName,
                            //a2.EMailAddress1,
                            a2.AccountId,
                            a2.CreatedOn
                        }).ToList();

        int count = 0;
        int mergeCount = 0;

        while (accounts.Count != 0 && accounts.Count != 1)
        {

            if (accounts.Count > 1 && accounts[0].Name == accounts[1].Name)
            {

                masterAccountId = accounts[0].AccountId.Value;
                subOrdinateAccountId = accounts[1].AccountId.Value;



                //target,Id is the GUID of the contact that is being merged into.        
                //LogicalName is the type of the entity being merged to, as a string        
                target.Id = masterAccountId;
                target.LogicalName = "account";

                //Create the request.        
                MergeRequest merge = new MergeRequest();



                // SubordinateId is the GUID of the contact merging.    
                merge.SubordinateId = subOrdinateAccountId;
                merge.Target = target;
                merge.PerformParentingChecks = false;
                Entity updateContent = new Entity("account");


                var accountcolumnset = new ColumnSet(
                    "name",
                    "accountnumber",
                    "new_membership",
                    //"parentaccountid",
                    "new_acronym",
                    "new_category",
                    "new_sortname",
                    "new_membertype",
                    "new_foundationtype",
                    "new_focusarea",
                    "new_focusarea2",
                    "new_focusarea3",
                    "new_100aging",
                    "new_isamember",
                    // Contacts section
                    "new_grantscontact",
                    "new_membershipcontact",
                    "msa_managingpartnerid",
                    "primarycontactid",
                    // Contact Information section
                    "address1_name",
                    "address1_composite",
                    "telephone1",
                    "websiteurl",
                    "emailaddress1",
                    // Details tab
                    // Contact Preferences section 
                    "preferredcontactmethodcode",
                    "donotphone",
                    "donotpostalmail",
                    // Marketing section
                    "donotsendmm",
                    "lastusedincampaign",
                    // Description section
                    "description"
                    );

                // Get Master Account Primary Contact,Website,Phone,Fax,Email
                Entity masterAccount = xrm.Retrieve("account", masterAccountId, accountcolumnset);

                // Get Subordinate Account Primary Contact,Website,Phone,Fax,Email
                Entity subOrdinateAccount = xrm.Retrieve("account", subOrdinateAccountId, accountcolumnset);

                // UPDATE THESE IFS WITH FIELD VALUES FROM THE COLUMN SET


                // If these fields are populated on the Subordinate Account and NOT populated on the Master Account, update the Master record with values from the suboordinate.  

                if (!masterAccount.Contains("accountnumber") && subOrdinateAccount.Contains("accountnumber")) 
                    updateContent.Attributes.Add("accountnumber", subOrdinateAccount.Attributes["accountnumber"]);

                if (!masterAccount.Contains("new_membership") && subOrdinateAccount.Contains("new_membership"))
                    updateContent.Attributes.Add("new_membership", subOrdinateAccount.Attributes["new_membership"]);

                //updateContent.Attributes.Add("primarycontactid", new EntityReference("contact", subOrdinateContact.GetAttributeValue<EntityReference>("primarycontactid").Id));

                //if (!masterAccount.Contains("parentaccountid") && subOrdinateAccount.Contains("parentaccountid"))
                //    updateContent.Attributes.Add("parentaccountid", subOrdinateAccount.Attributes["parentaccountid"]);

                if (!masterAccount.Contains("new_acronym") && subOrdinateAccount.Contains("new_acronym"))
                    updateContent.Attributes.Add("new_acronym", subOrdinateAccount.Attributes["new_acronym"]);

                if (!masterAccount.Contains("new_category") && subOrdinateAccount.Contains("new_category"))
                    updateContent.Attributes.Add("new_category", subOrdinateAccount.Attributes["new_category"]);

                if (!masterAccount.Contains("new_sortname") && subOrdinateAccount.Contains("new_sortname"))
                    updateContent.Attributes.Add("new_sortname", subOrdinateAccount.Attributes["new_sortname"]);

                if (!masterAccount.Contains("new_membertype") && subOrdinateAccount.Contains("new_membertype"))
                    updateContent.Attributes.Add("new_membertype", subOrdinateAccount.Attributes["new_membertype"]);

                if (!masterAccount.Contains("new_foundationtype") && subOrdinateAccount.Contains("new_foundationtype"))
                    updateContent.Attributes.Add("new_foundationtype", subOrdinateAccount.Attributes["new_foundationtype"]);

                if (!masterAccount.Contains("new_focusarea") && subOrdinateAccount.Contains("new_focusarea"))
                    updateContent.Attributes.Add("new_focusarea", subOrdinateAccount.Attributes["new_focusarea"]);

                if (!masterAccount.Contains("new_focusarea2") && subOrdinateAccount.Contains("new_focusarea2"))
                    updateContent.Attributes.Add("new_focusarea2", subOrdinateAccount.Attributes["new_focusarea2"]);

                if (!masterAccount.Contains("new_focusarea3") && subOrdinateAccount.Contains("new_focusarea3"))
                    updateContent.Attributes.Add("new_focusarea3", subOrdinateAccount.Attributes["new_focusarea3"]);

                if (!masterAccount.Contains("new_100aging") && subOrdinateAccount.Contains("new_100aging"))
                    updateContent.Attributes.Add("new_100aging", subOrdinateAccount.Attributes["new_100aging"]);

                if (!masterAccount.Contains("new_isamember") && subOrdinateAccount.Contains("new_isamember"))
                    updateContent.Attributes.Add("new_isamember", subOrdinateAccount.Attributes["new_isamember"]);

                // Contact Information section

                if (!masterAccount.Contains("address1_name") && subOrdinateAccount.Contains("address1_name"))
                    updateContent.Attributes.Add("address1_name", subOrdinateAccount.Attributes["address1_name"]);

                if (!masterAccount.Contains("address1_composite") && subOrdinateAccount.Contains("address1_composite"))
                    updateContent.Attributes.Add("address1_composite", subOrdinateAccount.Attributes["address1_composite"]);

                if (!masterAccount.Contains("telephone1") && subOrdinateAccount.Contains("telephone1"))
                    updateContent.Attributes.Add("telephone1", subOrdinateAccount.Attributes["telephone1"]);

                if (!masterAccount.Contains("websiteurl") && subOrdinateAccount.Contains("websiteurl"))
                    updateContent.Attributes.Add("websiteurl", subOrdinateAccount.Attributes["websiteurl"]);

                if (!masterAccount.Contains("emailaddress1") && subOrdinateAccount.Contains("emailaddress1"))
                    updateContent.Attributes.Add("emailaddress1", subOrdinateAccount.Attributes["emailaddress1"]);

                // Details tab 

                // Contact Preferences section

                if (!masterAccount.Contains("preferredcontactmethodcode") && subOrdinateAccount.Contains("preferredcontactmethodcode"))
                    updateContent.Attributes.Add("preferredcontactmethodcode", subOrdinateAccount.Attributes["preferredcontactmethodcode"]);

                if (!masterAccount.Contains("donotphone") && subOrdinateAccount.Contains("donotphone"))
                    updateContent.Attributes.Add("donotphone", subOrdinateAccount.Attributes["donotphone"]);

                if (!masterAccount.Contains("donotpostalmail") && subOrdinateAccount.Contains("donotpostalmail"))
                    updateContent.Attributes.Add("donotpostalmail", subOrdinateAccount.Attributes["donotpostalmail"]);

                // Marketing section 

                if (!masterAccount.Contains("donotsendmm") && subOrdinateAccount.Contains("donotsendmm"))
                    updateContent.Attributes.Add("donotsendmm", subOrdinateAccount.Attributes["donotsendmm"]);

                if (!masterAccount.Contains("emailaddress1") && subOrdinateAccount.Contains("emailaddress1"))
                    updateContent.Attributes.Add("emailaddress1", subOrdinateAccount.Attributes["emailaddress1"]);

                if (!masterAccount.Contains("fax") && subOrdinateAccount.Contains("fax"))
                    updateContent.Attributes.Add("fax", subOrdinateAccount.Attributes["fax"]);

                // Description section

                if (!masterAccount.Contains("preferredcontactmethodcode") && subOrdinateAccount.Contains("preferredcontactmethodcode"))
                    updateContent.Attributes.Add("preferredcontactmethodcode", subOrdinateAccount.Attributes["preferredcontactmethodcode"]);

                // Contacts section 

                if (!masterAccount.Contains("new_grantscontact") && subOrdinateAccount.Contains("new_grantscontact"))
                    updateContent.Attributes.Add("new_grantscontact", subOrdinateAccount.Attributes["new_grantscontact"]);

                if (!masterAccount.Contains("new_membershipcontact") && subOrdinateAccount.Contains("new_membershipcontact"))
                    updateContent.Attributes.Add("new_membershipcontact", subOrdinateAccount.Attributes["new_membershipcontact"]);

                if (!masterAccount.Contains("msa_managingpartnerid") && subOrdinateAccount.Contains("msa_managingpartnerid"))
                    updateContent.Attributes.Add("msa_managingpartnerid", subOrdinateAccount.Attributes["msa_managingpartnerid"]);

                if (!masterAccount.Contains("primarycontactid") && subOrdinateAccount.Contains("primarycontactid"))
                    updateContent.Attributes.Add("primarycontactid", subOrdinateAccount.Attributes["primarycontactid"]);



                merge.UpdateContent = updateContent;


                // Execute the request.   
                MergeResponse mergeRes = (MergeResponse)xrm.Execute(merge);

                count++;
                mergeCount++;

                Console.WriteLine("Merge #"
                    + mergeCount
                    + "\n" 
                    + "Master Account: " 
                    + accounts[0].Name
                    + " " 
                    + accounts[0].AccountId 
                    + "\n" 
                    + "Child Account: "
                    + accounts[1].Name
                    + " " 
                    + accounts[1].AccountId);



                accounts.RemoveAt(1);
            }
            else
            {

                if (accounts.Count > 2 && accounts.Count != 1 && accounts.Count != 0) 

                    accounts.RemoveAt(0);
            }
        }
        Console.ReadLine();
    }
}
updateContent.Attributes.Add("new_membershipname", ((EntityReference)subOrdinateAccount.Attributes["new_membership"]).Name);