0

私は頭の痛い問題を抱えています。数日前にすでに解決策をグーグルで検索しましたが、まだ見つかりませんでした。もしあなたの誰かが私を助けてくれたら、それは素晴らしいことです!

私はこの方法でSQLステートメントを受け取ります:

private static string GetClause<T>(IQueryable<T> clause) where T : BaseEntity
{
    string snippet = "FROM [dbo].[";

    string sql = clause.ToString();
    string sqlFirstPart = sql.Substring(sql.IndexOf(snippet));

    sqlFirstPart = sqlFirstPart.Replace("AS [Extent1]", "");
    sqlFirstPart = sqlFirstPart.Replace("[Extent1].", "");

    return sqlFirstPart;
}

しかし、これは何らかのフィルター (例: where) を使用しようとすると機能しません。""@p_ linq _{0}" が返されるためです。値の代わりに。これらがクエリのパラメータであることはわかっていますが、どこに保存されていますか?

これは、EF5 Code First でのバッチ削除の目的で使用します。

4

1 に答える 1

0

次のようなパラメーターを使用してクエリを作成する場合:

var name = "xxx";
var query = ctx.Persons.Where(x => x.FirstName == name);

次に、SQL ステートメントとパラメーターを次のように取得できます。

var oq = ((ObjectQuery<Person>)query);
var trace = oq.ToTraceString();    
var p = oq.Parameters;

p["p_linq_{0}"] のインデックスとして @ なしのパラメーター名 "p_linq_{0}" を使用します。

于 2013-08-22T13:49:59.970 に答える