获取带有参数的LINQ to sql语句(IQueryable)。
获取带有参数的LINQ to sql语句(IQueryable)。
我正在尝试找出是否有一种方法可以检索在数据库服务器上执行的(完整的)SQL语句。
我已经找到了一些东西,但它并不完全符合我的要求:
IQueryable someQuery = ... string command = dataContext.GetCommand(query).CommandText;
在我的情况下,这给我一个类似于命令字符串的东西:
SELECT TOP (50) [t0].[ID], .... FROM [dbo].[someTable] AS [t0] WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0))
在数据库上执行:
exec sp_executesql N'SELECT TOP (50) [t0].[ID], ... FROM [dbo].[someTable] AS [t0] WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0, @p1))',N'@p0 int,@p1 int',@p0=401,@p1=201
是否有一种从C#代码中检索此“完整”语句(因此也包括参数值)的方法?
admin 更改状态以发布 2023年5月23日
一旦你获得Command,你可以打印CommandText,然后循环遍历Parameters集合并打印出所有单独的参数。
同时还有linq-to-sql调试可视化工具,在调试模式下也会执行相同的操作。
一个非常好用的工具来查看查询语句的执行过程是Linq-to-sql剖析器。
如果您拥有一个IQueryable
的实例,并调用.ToString()
方法,您也可以查看生成的SQL查询语句。
例如:
var db = new DbContext(); IQueryablequery = db.Blog.Where(tt=> tt.Id > 100).OrderByDescending(tt=>tt.Id); var sqlString = query.ToString(); Console.WriteLine(sqlString);
这将生成如下输出:
SELECT [Extent1].[Id] AS [Id], [Extent1].[Title] AS [Title], [Extent1].[Author] AS [Author], [Extent1].[Text] AS [Text], [Extent1].[CreatedAt] AS [CreatedAt], [Extent1].[UpdatedAt] AS [UpdatedAt] FROM [dbo].[Blogs] AS [Extent1] WHERE [Extent1].[Id] > 100 ORDER BY [Extent1].[Id] DESC