1

私の最終的な目標は、linq 式を変換して xml を取得することです。MS CRM 2011 のカスタム グリッドに fetch XML を使用する予定です。

この記事から、QueryExpression を FetchXML に変換できますhttp://mileyja.blogspot.com/2011/07/convert-queryexpression-to-fetchxml.html

しかし、Linq 式を QueryExpression に取得する方法がわかりません。linq 式と言うときは、IQueryable<> 型のオブジェクトを意味します。

誰でもこれを経験したことがありますか、またはどのように知っていますか?

乾杯

4

3 に答える 3

2

リフレクションを使用してプロバイダーQueryExpressionIQuerable<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

于 2012-06-26T10:25:33.737 に答える
0

LINQ式でToString()を呼び出すと、FetchXMLが返されます。

于 2011-08-05T20:09:29.753 に答える