リフレクションを使用してプロバイダーQueryExpressionをIQuerable<T>取得し、その上で Translate メソッドを呼び出すことができます。
ここに私が使用している拡張メソッドがあります:
public static QueryExpression ToQueryExpression(this IQueryable @this)
{
var provider = @this.Provider;
var translateMethod = provider.GetType().GetMethod("Translate");
var query = (QueryExpression)translateMethod.Invoke(provider, new object[] { @this.Expression });
return query;
}
ExposedObjectのような C# でのリフレクションにある種の動的ラッパーを使用する場合は、次のように簡単に実行できます。
public static QueryExpression ToQueryExpression(this IQueryable @this)
{
dynamic provider = ExposedObject.From(@this.Provider);
return provider.Translate(@this.Expression);
}
フェッチに関しては、プロパティを持つレスポンスを返すQueryExpressionリクエストを発行する必要があります。QueryExpressionToFetchXmlRequestQueryExpressionToFetchXmlResponseFetchXml