I can't tell from looking at the examples, but can I do things like pass around arbitrary expressions:
Person.Get(p => (p.Age > 65 && p.Sex == "M") || (p.Age > 63 && p.Sex == "F"))
and have a method
public List<Person> Get(Expression<Func<Person,bool>> expression)
and have that expression interpreted correctly at run time by separate providers?
You get full compile time checking and IDE supported autocomplete.