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));