LINQPad 6 (RC1)

LINQPad 6 for .NET Core is available as a release candidate!

Download

Two download options:

Download setup (X64 + X86)

Download xcopy-deploy build (X64 + X86)

Note: if you download the xcopy-deploy build, you will need to install the .NET Core 3 Desktop SDK (3.0.0). There's a utility inside the zip to download it for you.

Release Notes

LINQPad 6 targets .NET Core 3.0, so your queries run under the .NET Core 3 runtime, and you can reference .NET Core assemblies. You can run LINQPad 5 side-by-side for .NET Framework compatibility.

Please report bugs using the "Report Bug" tool on the Help menu, or send an email to support@linqpad.net.

Deployment

  • LINQPad 6 is Framework-dependent, so you'll need to install .NET Core 3 runtime. Right now, you must choose the SDK download option, otherwise you won't get the desktop runtime.
  • LINQPad 6 is shipped in a single xcopy-deployable .zip containing two launchers. LINQPad6.exe runs LINQPad in 64-bit mode and LINQPad6-x86.exe run LINQPad in 32-bit mode. (You will need to run LINQPad-x86 if you want to reference 32-bit assemblies.)
  • The automatic updater in LINQPad 6 works for beta versions (as well as release versions).
  • For licensed users: To enable the Pro/Developer/Premium features of LINQPad 6, you'll need to upgrade your license to Version 6 if you bought your license before December 2018. Your new license activates all versions of LINQPad on your machine.

New features in LINQPad 6

  • You can now include namespace declarations in queries of type 'C# Program', so you can paste entire .cs files from Visual Studio into LINQPad.
  • LINQPad's editor now supports bookmarks, to help with navigating around large documents. The shortcut keys are the same as the defaults in Visual Studio, and ReSharper's ergonomic shortcut keys are also supported (Shift+Ctrl+1 through Shift+Ctrl+9 to set a numbered bookmark, and Ctrl+1 through Ctrl+9 to jump to a numbered bookmark).
  • You can now add references to other .linq files, via the new #load directive.
  • You can now connect to Oracle, MySQL, SQLite and PostgreSQL databases via a new built-in driver that leverages Entity Framework Core. The new driver generates data contexts with table and property names similar to the built-in LINQ-to-SQL driver (as well as LINQPad 5's IQ driver), so that queries can be easily ported. It also supports SQL Server, so for SQL Server you can now choose between LINQ-to-SQL and Entity Framework Core.
  • The default namespace imports for each query can now be viewed and edited. This can be useful in avoiding conflicts with other APIs.
  • The extensibility model for writing custom data context drivers has been updated for LINQPad 6. Creating a project is now as simple as running a LINQPad script, and publishing it is as simple as publishing a NuGet package.
  • When executing a selection in 'C# Program' mode, the selected text can now call other methods in the query.
  • The 'Go to definition' shortcut (F12) now works for symbols defined in My Extensions (as well as #load-ed queries).
  • The command-line runner and Util.Run are now available in LINQPad 6. The command-line runners are called LPRun6 (64-bit) and LPRun6-x86 (32-bit).
  • Charting is back, as is the Roslyn syntax tree visualizer. And Roslyn Quoter is now integrated! To activate, either right-click from the editor, or click the new button on the syntax tree visualizer.
  • Outlining now works in statements mode, too, if you have #regions or methods defined.
  • If you hold down the control key anywhere in the editor, it will display the quick-info tooltip, as well as any errors or warnings on that line.
  • If you type /// before a member, LINQPad will now expand it into a simple (one-line) XML summary. These summaries are picked up from #load-ed queries, as well as My Extensions.
  • The back-end for the NuGet Package Manager has been re-written to be faster and more reliable. It now works directly from the local user cache, and recognizes reference assemblies and native dependencies in line with .NET Core protocols. When restoring packages, LINQPad 6 searches all enabled package sources.
  • Queries now automatically re-load when the file is changed externally.
  • When calling file-based methods such as File.Open, the editor now offers autocompletion on the file path.
  • There are new options available when calling Dump - to suppress column totals, control repeating headers, and specify a depth at which to initially collapse the results.
  • When compiling your queries, LINQPad 6 preferences reference assemblies over runtime assemblies. If the reference assemblies for the current .NET Core runtime version have not been installed, LINQPad will offer to download the appropriate NuGet package.
  • LINQPad 6 supports soft cancellation. By monitoring this.QueryCancelToken, your query can respond to the Cancel button, and elect to end early without the underlying process being killed.
  • You can now connect to SQL CE databases without installing SQL CE. LINQPad will automatically download the NuGet package as required.
  • There's now a checkbox in the Query Properties dialog to include references to ASP.NET Core assemblies.
  • You can now rename a query tab (without saving it) by pressing Shift+F2, or via the option on the query tab's context menu.

Things that behave differently in LINQPad 6

  • When you referenced an .NET Framework assembly in LINQPad 5, any dependencies located in the same folder would automatically load. To support .NET Core and .NET Standard assemblies built by Visual Studio, LINQPad 6 goes further and parses the .deps.json file, automatically resolving all of the assembly's NuGet dependencies, combining them into a compatible set (along with any other NuGet packages that your query has referenced). Any packages that are missing for the current .NET Core version or architecture are automatically restored.
  • There are no options for specifying an app.config in LINQPad 6, because the app.config model is not applicable to .NET Core. Instead, you can ask LINQPad to copy .json configuration files in the application base directory, by adding references to those files (just as you would with DLLs).
  • There's no longer an option to add Framework assembly references. In keeping with Visual Studio, all .NET Core Framework assemblies are referenced automatically.
  • The built-in LINQ-to-SQL driver uses another (almost-identical) branch of LINQ-to-SQL that runs on .NET Core.
  • Live execution tracking is not supported in .NET Core.

Running LINQPad 5 and 6 side-by-side

If you're running LINQPad 5 and 6 side-by-side, you can share the same queries with some provisos:

  • Any .NET Framework assembly references are ignored in LINQPad 6.
  • Other assembly references may cause difficulties unless they are to .NET Standard libraries. NuGet package references are the best option.
  • For conditional compilation, the NETCORE symbol is defined in LINQPad 6 but not LINQPad 5.
  • My Extensions is separate for LINQPad 5 and 6, so each can have different implementations and dependencies. As long as you provide textually similar methods in both, queries will work with both.