Jeżeli jednak naprawdę zależy nam na wydajności (patrz rozszerzenia CRM Part 3), to możemy przekonwertować nasze QueryExpression na FetchXml (wymaga dodatkowego zapytania do serwera, czyli zamiast jednego z wynikiem mamy jeden z konwersją, drugi z wynikiem), który znów da nam kilka niezbędnych milisekund albo nawet i sekund (na przykład operacja count na tysiącach rekordów) przy wykonywaniu zapytania i pobieraniu danych.
Kod rozszerzenia:
public static class QueryExpressionExtensions
{
public static string ToFetchXml(this QueryExpression @this, IOrganizationService service)
{
var reqConvertToFetchXml = new QueryExpressionToFetchXmlRequest { Query = @this };
var respConvertToFetchXml = (QueryExpressionToFetchXmlResponse)service.Execute(reqConvertToFetchXml);
return respConvertToFetchXml.FetchXml;
}
}
Sposób wykorzystania:
// context.Service zwraca IOrganizationService
var x = from a in context.CreateQuery<entity1>()
join m in context.CreateQuery<entity2>() on a.entity2ref.Id equals m.entity2Id
select new
{
a.Id,
a.statuscode,
a.CreatedOn
};
var query = x.ToQueryExpression().ToFetchXml(context.Service);
var response = context.Service.RetrieveMultiple(new FetchExpression(query));














