Many engineers keep a paper scratchpad on their desk to doodle ideas and concepts that can eventually be turned into a working piece of technology. But there is also a benefit in keeping a virtual scratchpad as well – and linqpad is just the right tool for the job.
It’s all about the Dump()
The single most powerful feature of linqpad is the Dump()
extension method that you can call on any object. It will analyze the object graph and use its fine-tuned heuristics to present the object’s data in the most efficient way possible. It can also render bitmaps, xml data, and even WPF and WinForms controls!
Boosting your productivity game with linqpad
There are two main ways to leverage linqpad for more productivity: 1) scripting in your favorite language (C#/F#/VB.NET) and 2) easy database querying, edits, and data analytics.
Let’s look at each one in more detail.
Scripting with linqpad
Once you start using linqpad, gone are the days when you had to tediously set up yet another console project when you wanted to quickly whip up a simple CLI-based tool (yes, since C# 9 you can use Top-level statements for the same reason, but it lacks many of the possibilities offered by linqpad).
Depending on the desired use case, linqpad script can be run in three different modes:
- Expression:
- The script can contain only a single expression.
- No need to add ; at the end and
Dump()
is called automatically on the expression result. - Great for quick DB queries, generating guids, and other single line shenanigans.
- Statements:
- The script can contain multiple expressions.
Dump()
has to be called explicitly to display expression result.
- Program:
- The script will contain a
Main()
method serving as an entry point (think of this mode as aProgram.cs
class equivalent.). - Other methods, classes, structs, and records can be defined in the script in this mode.
Dump()
has to be called explicitly to display expression result.
Linqpad also comes with a built-in nuget package manager to leverage any package from the amazing .NET ecosystem and integrated VS-style debugger (that one is available only in the paid version though).
Once your idea becomes polished enough, you can simply copy-paste the code into your existing project in your main IDE (e.g. Visual Studio or Rider) or save it to a .linq file and share it with your colleagues. The file can then be run via linqpad or as a process in your favorite shell via the lprun command (you can access STDIN, STDOUT
, and command arguments in your linqpad script the same way you would in a typical .NET console application). It’s as simple as this:
data.csv > lprun myquery.linq CustomArg1 CustomArg2 > output.txt
Data analytics with linqpad
Typical DB workflow with linqpad starts with adding a new DB connection. Based on the connection, a LinqToSql DB context is generated. This context is then used for querying of the database in the same manner as it would be used in any .NET application. Another option is to load a typed Entity Framework DataContext from an existing dll.
There are a myriad of other officially supported DB drivers (Oracle, PostgreSQL, mysql, MariaDB, Azure table storage, MongoDB, SAP HANA, and more). This makes linqpad a mighty tool when working with a database with an unfamiliar query syntax. For me, it’s a life saver when I’m forced to work with oracle databases (Oracle SQL has a very specific syntax and most of MSSQL/MySQL developers find it quite irritating. By using linqpad you can avoid touching Oracle SQL altogether.).
Querying using LINQ is not only more convenient but also almost friction-free because of a rock-solid intellisense thanks to the typed data context. Most SQL IDEs offer at least some sort of intellisense, but it pales in comparison to the linqpad one.
Navigation properties
When examining the query results there might be a need to explore the related entities. All you need to do is click the desired navigation property of the entity and all related data will be automatically loaded and displayed. No need for an additional query.

Results editing
There is nothing more annoying than writing a lengthy INSERT/UPDATE
statement just to add a single row or to edit a single value in a table. To save you the pain of doing so, linqpad allows you to switch to a grid view and make the necessary edits there.

Results export
Once satisfied with the query results, there is an option to export them to either Word, Excel, or HTML. Another export option is using the bult-in Util.WriteCsv()
method to write the result data directly into a csv file.
Other handy, not-so-known features
There are a myriad of smaller, built-in features of linqpad that you probably won’t use every time, for example:
Password input
For obvious security reasons, storing passwords in code is a bad idea. But by using the Util.GetPassword()
method, passwords can be entered in a safe manner.

Interactive regex evaluator
Writing and debugging complex regular expressions is always a pain. Linqpad comes in with a handy tool to ease this tedious task. And if your memory is as weak as the author’s, you will definitely appreciate the built-in regex reference and a cookbook with the most commonly used regexes.

Progress bar
Query execution progress can be displayed in the linqpad’s progress bar or for each execution step in the results pane.

CSV exports
The query results can be easily exported in CSV format either by Util.ToCsvString()
or Util.WriteCsv()
method.

Charting
It is possible to visually represent the query data via built-in charting. Just call the Util.Chart()
method.

Diffing
Comparing data in two objects (to any depth) can be achieved using the Util.Dif()
method.

Caching between runs
To avoid running expensive queries multiple times, the result can be cached between query runs using the Util.Cache()
method.

Final thoughts & resources
After learning about all the possible ways to utilize linqpad (doodling/scripting/data analysis), you’ll be surprised how quickly it will become an essential sidekick, having your back every day of your programming journey.
- Official site
- Summary of less known linqpad features on StackOverflow by the author
- Linqpad on Twitter
© Featured image by Kelly Sikkema from Unsplash