Retrieve LINQ to sql statement (IQueryable) WITH parameters

(SqlCommand)dataContext.GetCommand(query)

will give you access to Parameters collection.


I'm using Datacontext.Log property to get the generated SQL Statement (it includes the statement text, and parameters).

Just set YourDataContext.Log = SomeTextWriter.

It can be written to a file (Log = new StreamWriter(@"c:\temp\linq.log")) or to debug window, see this post


Once you get the Command you can print the CommandText and then loop through the Parameters collection and print all the individual parameters.

Also there is the linq-to-sql debug visualizer which does the same in debug mode.

A really nice tool to view the queries as they are happening is the Linq-to-sql profiler


You can also see the generated sql query if you have an instance of IQueryable<T> and call the .ToString() method.
For Example:

var db = new DbContext();
IQueryable<Blog> query = db.Blog.Where(tt=> tt.Id > 100).OrderByDescending(tt=>tt.Id);
var sqlString = query.ToString();
Console.WriteLine(sqlString);

This will generate an output of:

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

Tags:

C#

Linq To Sql