FetchXml is great when you quickly want to extract some data. Today, I found a weird behaviour, that is either a bug, or a documented “feature” that I am not aware of.
If you run this code below
var fetch = @" <fetch version='1.0' output-format='xml-platform' mapping='logical' {0} count='1'> <entity name='contact'> <attribute name='fullname'/> </entity> </fetch>"; Console.WriteLine("With Distinct True And Without Id\n--------------------------------"); var results = crmSvc.OrganizationServiceProxy.RetrieveMultiple(new FetchExpression(string.Format(fetch, "distinct='true'"))).Entities.ToList(); results.ForEach(x => Console.WriteLine("Id: {0}",x.Id)); Console.WriteLine("\nWith Distinct True And With Id Field\n--------------------------------"); results = crmSvc.OrganizationServiceProxy.RetrieveMultiple(new FetchExpression( @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true' count='1'> <entity name='contact'> <attribute name='contactid'/> <attribute name='fullname'/> </entity> </fetch>")).Entities.ToList(); results.ForEach(x => Console.WriteLine("Id: {0}", x.Id)); Console.WriteLine("\nWith Distinct False\n--------------------------------"); results = crmSvc.OrganizationServiceProxy.RetrieveMultiple(new FetchExpression(string.Format(fetch, "distinct='false'"))).Entities.ToList(); results.ForEach(x => Console.WriteLine("Id: {0}", x.Id)); Console.WriteLine("\nWithout Distinct\n--------------------------------"); results = crmSvc.OrganizationServiceProxy.RetrieveMultiple(new FetchExpression(string.Format(fetch, string.Empty))).Entities.ToList(); results.ForEach(x => Console.WriteLine("Id: {0}", x.Id));
You get this output,
As you can see, if you put distinct=true in your fetchxml, without retrieving the primary key, and iterate through the RetrieveMultiple result, the Id property will be Guid.Empty for all the entities in the EntityCollection.