リフレクションを使用してプロバイダー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
リクエストを発行する必要があります。QueryExpressionToFetchXmlRequest
QueryExpressionToFetchXmlResponse
FetchXml