我有一个问题让我头痛不已。我几天前已经用谷歌搜索了一个解决方案,但是我还没发现它,如果你们其中一个人可以帮助我,那就太好了!
我有这个方法为我带来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上使用它进行批量删除。
答案 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}”]的索引。