Understanding Expressions in C#: Dynamic Code and Query Generation

What is an Expression?

An Expression in C# represents code as data. It allows dynamic query generation, runtime compilation, and transformation.

Why Use Expressions?

  • Dynamic LINQ queries
  • Runtime code compilation
  • Expression manipulation
  • Performance optimization

Basic Syntax

Expression<TDelegate> expression;

Example 1. Simple Expression

using System;
using System.Linq.Expressions;

class Program {
    static void Main() {
        ParameterExpression x = Expression.Parameter(typeof(int), "x");
        BinaryExpression multiply = Expression.Multiply(x, Expression.Constant(2));
        Expression<Func<int, int>> lambda = Expression.Lambda<Func<int, int>>(multiply, x);
        Func<int, int> compiledLambda = lambda.Compile();
        Console.WriteLine(compiledLambda(5)); // Output: 10
    }
}

Example 2. Dynamic Filtering in LINQ

using System;
using System.Linq.Expressions;
using System.Linq;

class Program {
    static void Main() {
        var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
        ParameterExpression x = Expression.Parameter(typeof(int), "x");
        BinaryExpression condition = Expression.GreaterThan(x, Expression.Constant(5));
        Expression<Func<int, bool>> lambda = Expression.Lambda<Func<int, bool>>(condition, x);
        var result = numbers.AsQueryable().Where(lambda).ToList();
        Console.WriteLine(string.Join(", ", result)); // Output: 6
    }
}

Commonly Used Expressions

  • Expression.Constant(10) - Represents a constant (10).
  • Expression.Parameter(typeof(int), "x") - Represents a variable (x).
  • Expression.Add(x, y) - Represents addition (x + y).

When to Use Expression?

  • Dynamic Query Building
  • ORMs (EF Core, Dapper)
  • Runtime Code Compilation

Summary
 

Feature Details
Purpose Build & execute dynamic expressions
Namespace System.Linq.Expressions
Use Case Dynamic LINQ queries, ORM, reflection

Up Next
    Ebook Download
    View all
    Learn
    View all