DeltaLinq 1.0.0

dotnet add package DeltaLinq --version 1.0.0
                    
NuGet\Install-Package DeltaLinq -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DeltaLinq" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DeltaLinq" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="DeltaLinq" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DeltaLinq --version 1.0.0
                    
#r "nuget: DeltaLinq, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DeltaLinq@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DeltaLinq&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=DeltaLinq&version=1.0.0
                    
Install as a Cake Tool

DeltaLinq

LINQ/EF-style querying for Delta Lake on .NET. Write idiomatic C#; DeltaLinq translates your IQueryable expression tree to SQL and pushes it down into an embedded DuckDB + delta engine. No Spark, no JVM, no Python.

using DeltaLinq;

var users = await DeltaTable.Open<User>("s3://bucket/users")
    .Where(x => x.Country == "NL" && x.SignupDate > new DateTime(2023, 1, 1))
    .OrderBy(x => x.Name)
    .Take(100)
    .ToListAsync();

Features

  • LINQ provider with predicate pushdown, projection/column pruning, ordering, Take/Skip, Distinct.
  • GroupBy + grouped aggregates → SQL GROUP BY / HAVING (single & composite keys; Count/Sum/Min/Max/Average).
  • Joins — Join (inner) and LeftJoin, single & composite keys, 2+ tables (chained), aggregates over joins.
  • Append writes — DeltaTable.AppendAsync<T>(path, rows) commits new rows (creates the table if missing).
  • Parameterized SQL — string/numeric/boolean values are bound as parameters, not inlined.
  • Async terminal operators: ToListAsync, ToArrayAsync, FirstAsync/FirstOrDefaultAsync, SingleAsync/SingleOrDefaultAsync, CountAsync/LongCountAsync, AnyAsync, SumAsync/MinAsync/MaxAsync/AverageAsync.
  • Streaming via AsAsyncEnumerable() for low-memory iteration.
  • Rich expression translation: comparisons, boolean/null logic, arithmetic, string methods (Contains/StartsWith/EndsWith/ToLower/ToUpper/Trim/Substring/Replace/Length/IsNullOrEmpty), DateTime parts, IN via list.Contains(x.Col), ?? (coalesce), and ternary (CASE).
  • Column mapping via [Column] / [NotMapped] (System.ComponentModel.DataAnnotations.Schema).
  • Cloud storage: local filesystem, AWS S3, Azure Data Lake Storage, Google Cloud Storage.
  • Safe by design: anything that can't be pushed down throws NotSupportedException instead of silently dragging the whole table into memory.

Quick start

using DeltaLinq;
using System.ComponentModel.DataAnnotations.Schema;

public sealed class User
{
    public long Id { get; set; }
    public string Name { get; set; } = "";
    public string Country { get; set; } = "";
    [Column("signup_date")] public DateTime SignupDate { get; set; }
    public double Price { get; set; }
}

// Local
var q = DeltaTable.Open<User>(@"C:\data\users");

// Cloud (S3)
var opts = new DeltaOptions
{
    Storage = new S3StorageOptions { Region = "eu-west-1", AccessKeyId = "...", SecretAccessKey = "..." },
    OnSql = sql => Console.WriteLine(sql)   // see the generated SQL
};
var cloud = DeltaTable.Open<User>("s3://bucket/users", opts);

int active = await cloud.Where(x => x.Price > 100).CountAsync();

See the project repository for the full guide, the AddDeltaLake() DI package, and current limitations.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on DeltaLinq:

Package Downloads
DeltaLinq.DependencyInjection

AddDeltaLake() integration for DeltaLinq: register Delta table sources and options in the .NET dependency injection container for ASP.NET Core, Minimal APIs, and Worker Services.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 159 6/3/2026