Bindable LINQ

Reactive Programming for the .NET Framework

LINQ

Language Integrated Query, or LINQ, is a component of the .NET Framework that adds integrated data querying syntax to C#, VB.NET and other .NET languages. LINQ allows you to use a common set of syntax and query operators that can be applied to various sources of data via the concept of LINQ providers. LINQ to Objects is an out-of-the-box LINQ provider that allows querying over in-memory collections such as generic Lists or Arrays.

The functional characteristics of LINQ, and its focus on querying data, make it a perfect enabler of Reactive Programming. Unfortunately, with LINQ to Objects, once a LINQ query has been evaluated and the results have been yielded, subsequent changes to the source collection are not propagated. LINQ to Objects is designed purely for discreet evaluation.

Bindable LINQ is thus an implementation of LINQ that works in-memory, just like LINQ to Objects, but which maintains the relationship with the source being queried. When the source collection raises events indicating that something has changed, Bindable LINQ will propagate the changes throughout the LINQ query, evaluate the changes, and any derived values will be updated. Bindable LINQ enables reactive LINQ queries.