Is it not invented here if a Microsoft project chooses to re-invent something that Microsoft already did?
Take a look at how queries are being performed:
That looks strange, let us dig a bit deeper, shall we?
And it is not alone! It has a full family and some friends too:
So you create a specification, and then you call that specification to create an expression tree, and then you use that expression tree for the queries. If only we had builtin specification support in the framework! Oh, wait! It is called Linq! And it is already being used here, so they obviously know about it.
And no, this isn’t the case of needing to serialize specification over the wire, they are used in the same process as the one where the queries execute on.
I mean, seriously! You didn’t consider just dropping all of those abstractions and getting the work done? Oh, I forgot, there isn’t any work to be done, the application isn’t actually doing anything, all the abstractions are the point.