LINQPad

LINQPad

Introduction

I have used LINQPad on and off for years. LINQPad, a powerful tool designed for .NET developers, primarily known for testing LINQ queries, it is a versatile scripting environment that supports C#, F#, and VB.NET.

This blog post will illustrate its features through five comprehensive examples and, hopefully, you will become a fan of it too.

What is LINQPad?

LINQPad is more than just a tool for Language Integrated Query (LINQ); it’s a streamlined Integrated Development Environment (IDE) tailored for .NET developers.

Its primary purpose is to enable quick and efficient testing of LINQ queries, but its utility extends far beyond. It supports C#, F#, and VB.NET, allowing for the execution of code snippets, database queries, and even entire programs in a lightweight environment.

This makes it an ideal platform for experimenting, learning, and debugging.

You can download LINQPad from here: – https://www.linqpad.net/download.aspx

Features at a Glance

  • Efficient LINQ Testing: Quickly test LINQ queries across various data contexts.
  • Multi-Language Support: Compatible with C#, F#, and VB.NET.
  • Database Connectivity: Direct interaction with SQL and other databases.
  • Rich Output Formatting: Enhanced result viewing with custom visualisation.
  • Extensions and Snippets: Expand functionality with user-contributed extensions and reusable code snippets.

Example 1: Basic LINQ Query in LINQPad

void Main()
{
    // Define a simple array of numbers
    var numbers = new[] { 1, 2, 3, 4, 5 };

    // Use LINQ to filter even numbers
    var evenNumbers = from n in numbers
                      where n % 2 == 0
                      select n;

    // Output the results
    evenNumbers.Dump("Even Numbers");
}

In this example, LINQPad is used to filter even numbers from an array. It demonstrates the ease with which LINQ queries can be written and tested.

Example 2: Database Interaction

void Main()
{
    // Connect to a database context
    var db = new MyDataContext();

    // Query for recent orders within the last 30 days
    var recentOrders = db.Orders.Where(order => order.Date > DateTime.Now.AddDays(-30));

    // Display the query results
    recentOrders.Dump("Recent Orders");
}

This example showcases LINQPad’s ability to connect to a database and execute queries. It’s particularly useful for testing data retrieval logic.

Example 3: Dynamic LINQ

void Main()
{
    // Define a dynamic query string
    string dynamicQuery = "new (Name as FullName, Age)";

    // Sample data set
    var people = new[] { new Person("Alice", 30), new Person("Bob", 35) };

    // Execute a dynamic LINQ query
    people.AsQueryable().Select(dynamicQuery).Dump("Dynamic Query Results");
}

Dynamic LINQ in LINQPad allows for building queries using strings, offering a flexible approach to query construction.

Example 4: Scripting with C#

void Main()
{
    // Simple C# scripting
    Console.WriteLine("Exploring LINQPad!");

    // Additional C# code can be executed here
    // For instance, data manipulation or algorithm testing
}

LINQPad isn’t limited to LINQ; it’s a full-fledged environment for C# scripting. This example highlights its capability to run and test general C# code.

Example 5: Utilising LINQPad Extensions

void Main()
{
    // Sample JSON data
    var jsonData = "{\"name\":\"John\", \"age\":30}";

    // Use an extension method to convert JSON to XML
    jsonData.JsonToXml().Dump("Converted XML");
}

The extensibility is one of its strengths. In this example, a custom extension is used to convert JSON data to XML, showcasing how it can be tailored to specific needs.

Conclusion

LINQPad is a dynamic and versatile tool that is invaluable for .NET developers. It streamlines the process of writing, testing, and prototyping code, making it a vital part of the development toolkit.

Whether it’s executing complex LINQ queries, interacting with databases, or simply testing a piece of C# code, it offers a level of convenience and efficiency that is hard to match.

Embracing LINQPad can significantly enhance your coding workflow, whether you’re a beginner or an experienced developer.

Stephen

Hi, my name is Stephen Finchett. I have been a software engineer for over 30 years and worked on complex, business critical, multi-user systems for all of my career. For the last 15 years, I have been concentrating on web based solutions using the Microsoft Stack including ASP.Net, C#, TypeScript, SQL Server and running everything at scale within Kubernetes.