Working surprisingly well. As purely a query language, it has:
- Equals, subset, distinct
- Where
- Select (combines Rename, Project, Extend)
- Set ops: union, minus, intersect, symdiff
- Join and Antijoin
- Order by (for export purposes)
- Skip Take
The code looks like this:
class TT1 : NdlTuple<TT1> { public string A2; public int A1; public decimal A3; public static TT1[] R1() { return new TT1[] { new TT1 { A1 = 42, A2 = "hello", A3 = 1.2m }, new TT1 { A1 = 42, A2 = "world", A3 = 1.2m }, }; } public static NdlRelation<TT1> NDR_1() { return new NdlRelation<TT1>(R1()); } } var v1 = TT1.NDR_1(); var v2 = v1.Where(t => t.A1 == 42); var v3 = v2.Select(t => new TT2 { A1 = t.A1, A2 = "constant", A3 = t.A3 });
I’m making heavy use of NUnit and finding plenty of bugs. No updates yet; no data import; no aggregation; no while/recursion; no ordered queries. But it all seems surprisingly possible, even without a lot of help from the compiler. And much easier than writing compilers.