如何从Linq To Entities子句获取SQL语句

时间:2013-08-22 11:40:49

标签: c# entity-framework linq-to-entities entity-framework-5

我有一个问题让我头痛不已。我几天前已经用谷歌搜索了一个解决方案,但是我还没发现它,如果你们其中一个人可以帮助我,那就太好了!

我有这个方法为我带来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上使用它进行批量删除。

1 个答案:

答案 0 :(得分: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}”]的索引。