获取带有参数的LINQ to sql语句(IQueryable)。

14 浏览
0 Comments

获取带有参数的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日
0
0 Comments

一旦你获得Command,你可以打印CommandText,然后循环遍历Parameters集合并打印出所有单独的参数。

同时还有linq-to-sql调试可视化工具,在调试模式下也会执行相同的操作。

一个非常好用的工具来查看查询语句的执行过程是Linq-to-sql剖析器

0
0 Comments

如果您拥有一个IQueryable的实例,并调用.ToString()方法,您也可以查看生成的SQL查询语句。
例如:

var db = new DbContext();
IQueryable query = 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

0