Introduction
For the last little while, I've been toying around with System.Linq.Expressions
and a mini SQL parser to see how far I can go with evaluating plain text SQL expressions against arbitrary collections of objects. It's mostly a side project for my own enjoyment but eventually, I am hoping it actually turns into something broadly useful.
Results so far I've put on CodeProject:
It's been a while, but today I opened up that code again and got a basic JOIN
operator working. This is cool because ultimately I'd like to be able to join loosely related datasources; say across the mp3 tags in my music collection and the data on my last.fm account.
So just now, I've been able to get this unit test to pass:
[TestMethod]
public void SimpleJoin()
{
IEnumerable source<Person> = TestData.GetPeople();
IEnumerable families<Family> = TestData.GetFamilies();
var answer = source.Join(families, p => p.Address, f => f.Address,
(p, f) => new FamilyMember
{ Name = p.Name, LastName = f.Name, Location = f.Address });
var result = source.Query<Person, Family, FamilyMember>
("SELECT Name, that.Name AS LastName, Address AS Location
FROM this INNER JOIN that ON this.Address = that.Address", families);
Assert.IsTrue(result.SequenceEqual(answer));
}
This is cool because now I can start generating complex queries without having compile time knowledge of the underlying data structures. Once I get things fleshed out further, I'll update things on CodeProject.
CodeProject