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_linq_{0}”作为 p, p["p_linq_{0}"] 的索引。

于 2013-08-22T13:49:59.970 回答