Your competitor here. :grinning:
Pinq queries containing
groupJoin can be thousands of times slower than native implementation, or any other LINQ library, when long arrays are joined (thousands of items). I have no idea what is going on, as I have trouble navigating your immense code base, but you should probably look into it.
I've run the tests, your code is often an order of magnitude slower than YaLinqo, sometimes less, sometimes much more (like in the cases above). See gist with benchmark results (master branch). I've significantly improved performance of sorting thanks to your implementation. I didn't know
array_multisort is so much faster than
usort — the difference caused Pinq to be the fastest of the major LINQ libraries in the sorting test (well, no longer so, but it was).
Considering your library is the only one providing LINQ to databases, I think it's critical to avoid performance traps in the basic functionality, even if the library is the slowest of the bunch.
Technically, we aren't even competitors, considering YaLinqo is designed to be fast and expressive LINQ to objects and Pinq is designed to be LINQ to both objects and databases. Functionality and performance is so different that there isn't much to compete over. I'm still surprised by the lack of functionality in the basic methods of Pinq though, but I guess limiting expressiveness is required to make implementing query providers actually possible.
What is the current state of MySQL query provider? Your website and readme say that it's a "demo", so I'm curious what plans you have on implementing production-ready query providers.
By the way, how did you manage to receive more than 200 stars on GitHub? Did SitePoint cause so much traffic or is it something else?
Anyway, thanks for writing your library. Ginq and Pinq forced me to update my own library: add missing methods, improve peformance, add integartion with CI and code quality tools. :grinning: