Retrive DynamicEntity from FetchXml query

Hi everyone , some times you need to supply a query form outside the code in a MS CRM solution. Using the following code snippet we can create the query dynamically and pass it to the code to get dynamic entities.

Now suppose i need to execute this query

<fetch mapping='logical'>
    <entity name='contact'>
        <filter type='and'>
            <condition attribute='lastname' operator='eq' value='xyz’/>
        </filter>
    </entity>
</fetch>

to get a list of dynamic entitles

Now either we can break the query and let the code just to have the logical section form this fetchXml or we can use the fetchXml as a whole. Now if i break the query  like

<entity name='contact'>
<filter type='and'>
<condition attribute='lastname' operator='eq' value='xyz’/>
</filter>
</entity>
And inside the code i can

		// here new_criteria contains the logical section from fetch xml(see above)
StringBuilder QueryBuilder = new StringBuilder(new_criteria);
QueryBuilder.Insert(0, "", 1);
QueryBuilder.Insert(QueryBuilder.Length, "
", 1);





Now the next thing i need to do is to convert his query to a CRM QueryExpression, thankfully CRM SDK contains some request & response classes to help






//This is the request/response object to Convert the FetchXML into a query expression.
FetchXmlToQueryExpressionRequest conversionRequest = new FetchXmlToQueryExpressionRequest
{
FetchXml = QueryBuilder.ToString()
};

// and here is the response
FetchXmlToQueryExpressionResponse conversionResponse =
(FetchXmlToQueryExpressionResponse)crmService.Execute(conversionRequest);




Now as we know that the query will results multiple records we will use it in RetriveMultiple


//Retrive Multiple Request
RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
retrieve.Query = conversionResponse.Query;
retrieve.ReturnDynamicEntities = true;

//Retrieve Multiple Response
RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse)crmService.Execute(retrieve);

if (retrieved.BusinessEntityCollection.BusinessEntities.Count > 0 )
{
for (int entityCount = 0; entityCount < retrieved.BusinessEntityCollection.BusinessEntities.Count; entityCount++)
{
// retrive the first entity form the collection
DynamicEntity entity = (DynamicEntity)retrieved.BusinessEntityCollection.BusinessEntities[entityCount];


}
}