I wrote a relational LINQ provider for .NET Standard 1.4+ that supports a ton of stuff including GroupBy, TakeWhile, Zip, TPH/TPT/TPC queries, etc.
About 10 months or so ago I became frustrated with trying to contribute to EF Core. I was trying to implement GroupBy and any other possible optimizations/enhancements to query translation, but I couldn't make things work the way I wanted them to with Relinq and while I don't disrespect the team in the least, I felt held back -- I'm not actually a member of their team so I had no real-time communication with them, and I like to work rapidly.
In my frustration, and with the knowledge I had gained in expression tree rewriting, I set out to prove that not only could GroupBy and TPT/TPC be developed more rapidly, but other LINQ expressions typically deemed 'untranslatable' like SkipWhile/TakeWhile/SequenceEqual/Zip could be had and database features like FOR JSON or FOR XML could be utilized to prevent a bunch of n+1 queries. (Aside: during my research I discovered some academic literature by Torsten Grust who had, at some point prior, taken a similar approach and managed to hook it into EF4 or whatever version it was at the time.)
Anyways, here it is, it has a decent-sized test suite so you can see examples:
https://github.com/tuespetre/Impatient
If anyone wants to fork it or write a little extension that hooks it into EF Core, be my guest. I simply don't have the time to do everything I would have liked to do with it.
0 comments:
Post a Comment