Czasami liczy się wydajność rozwiązania, jednak wciąż chcielibyśmy zachować prostotę pracy z CRM, stąd też rozszerzenie ToQueryExpression, które umożliwia konwersję zapytania LINQ to szybszego jej odpowiednika.
Kod rozszerzenia:
public static class QueryExpressionExtensions
{
public static QueryExpression ToQueryExpression(this IQueryable @this)
{
var queryProvider = @this.Provider;
var translateMethod = queryProvider.GetType().GetMethod("Translate");
var query = (QueryExpression)translateMethod.Invoke(queryProvider, new object[] { @this.Expression });
return query;
}
}
Testów rozszerzenia nie ma, jako, że jest to wewnętrzna metoda MS wykorzystywana tak czy siak podczas wysyłania zapytania do CRM. Z tą różnicą, iż teraz mając QueryExpression, nie będziemy mieli całego procesu mapowania na silnie typowane obiekty, co daje nam sporo, naprawdę sporo czasu :)
Sposób wykorzystania:
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();
var retrieve = new RetrieveMultipleRequest { Query = query };
var retrieved = (RetrieveMultipleResponse)context.Service.Execute(retrieve);














