C# 在何处查找转换为Sql的Linq到实体查询
我希望以编程方式获取经过翻译的Linq查询,并使用Sql语法做一些事情 假设这是我的代码:C# 在何处查找转换为Sql的Linq到实体查询,c#,sql-server,entity-framework,linq,asp.net-web-api,C#,Sql Server,Entity Framework,Linq,Asp.net Web Api,我希望以编程方式获取经过翻译的Linq查询,并使用Sql语法做一些事情 假设这是我的代码: public class MyApiController:ApiController { public IQueryable<object> Get() { var objs=Context.Objexts.Where(m=>m.Id>10); return objs; } } 您可以在objs上调用ToString()方法。这将导致调用
public class MyApiController:ApiController
{
public IQueryable<object> Get()
{
var objs=Context.Objexts.Where(m=>m.Id>10);
return objs;
}
}
您可以在
objs
上调用ToString()
方法。这将导致调用返回已执行SQL的ToTraceString
:
string sql = objs.ToString();
我认为这些帖子可以帮助你: (一) (二) 几个例子(来自上面): 有关
.ToTraceString()
的文档可在此处找到:
如果您使用的是Entity Framework 6,另一个选项是使用新功能记录发生的情况,您可以获得t-sql和查询时间:
不要得到你想做的。为什么要从Linq生成SQL查询?是的,我也不明白为什么要这样做,可以用代码设置查询,为什么要更改实际查询?从ToString返回的SQL是否总是一个没有参数的完整SQL语句?如果我使用.Where(c=>c==“abc';delete from othertable;”),那么生成的sql能保证sql注入安全吗?这是一个很小但很重要的概念。有一半的情况下,我们会启动sql查询配置文件,以获取在sql server实例上触发的查询文本。好极了!如果objs=Context.Objexts.Where(m=>m.Id>10).Sum(m=>m.num),那么如何知道翻译后的sql@Jaco?
string sql = objs.ToString();
var sql = ((System.Data.Objects.ObjectQuery)objs).ToTraceString();
var sql = objs.ToString();
using (var context = new BlogContext())
{
context.Database.Log = Console.Write; //here, you can write this info to a text file for example.
// Your code here...
}