OData / AspNetCoreOData

ASP.NET Core OData: A server library built upon ODataLib and ASP.NET Core
Other
453 stars 159 forks source link

Convention model does not route properly #757

Open HuntJason opened 1 year ago

HuntJason commented 1 year ago

Assemblies affected Which assemblies and versions are known to be affected e.g. ASP.NET Core OData 8.x

Describe the bug A clear and concise description of what the bug is.

Reproduce steps The simplest set of steps to reproduce the issue. If possible, reference a commit that demonstrates the issue.

Data Model Please share your Data model, for example, your C# class.

EDM (CSDL) Model Please share your Edm model, for example, CSDL file. You can send $metadata to get a CSDL XML content.

Request/Response Please share your request Uri, head or the request body Please share your response head, body.

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem.

Additional context Please share your call stack or any error message Add any other context about the problem here.

HuntJason commented 1 year ago

Using the Convention Model (ODataQueryOptions) as opposed to the Attribute Model ([EnableQueryAttribute]) does not route the command to the controller.

In my opinion, it is preferable to use the Convention Model as the QueryOptions can be applied to an Entity Framework query; returning fewer records between the database and the controller before returning it to the calling client as opposed to returning ALL records from the database and then filtering them in the service prior to returning them to the client.

Steps to replicate: When running the ODataRoutingSample and opening the Swagger UI, execute the api/Accounts endpoint. Putting a breakpoint within the controller method does not get hit.

julealgon commented 1 year ago

In my opinion, it is preferable to use the Convention Model as the QueryOptions can be applied to an Entity Framework query; returning fewer records between the database and the controller before returning it to the calling client as opposed to returning ALL records from the database and then filtering them in the service prior to returning them to the client.

I think you are confused there. There is zero difference between conventional and attribute routes when it comes to how OData operates: you can get the exact same feature-set no matter how your routes are being discovered.

Can you please elaborate on what you mean exactly that lead you to believe the QueryOptions wouldn't be able to be applied at the database level if not using conventional model?

Or maybe you are talking about EDM-less flow vs EDM flow? Even then however, you can still apply the query options to the database regardless of approach, so if you have an example you wanna share that would be great.

Steps to replicate: When running the ODataRoutingSample and opening the Swagger UI, execute the api/Accounts endpoint. Putting a breakpoint within the controller method does not get hit.

Would be nice if you could update the issue with all the necessary information.

julealgon commented 1 year ago

Using the Convention Model (ODataQueryOptions) as opposed to the Attribute Model ([EnableQueryAttribute]) does not route the command to the controller.

Just to make sure: are you using ODataQueryOptions, or ODataQueryOptions<T>? The terminology you are using "convention model" vs "attribute model" is very misleading, as it immediately reminds people of conventional routing vs attribute routing, which is completely different.

HuntJason commented 1 year ago

Personally, I am using ODataQueryOptions, the same as in the referenced AccountsController from the ODataRoutingSample.

julealgon commented 1 year ago

Personally, I am using ODataQueryOptions, the same as in the referenced AccountsController from the ODataRoutingSample.

The sample is using ODataQueryOptions<Account>:

https://github.com/OData/AspNetCoreOData/blob/61ae3232d4ad687bc552fc583b32103f1aeff41a/sample/ODataRoutingSample/Controllers/AccountsController.cs#L78

Can you share your controller code along with the request you are trying to make?

HuntJason commented 1 year ago

In my opinion, it is preferable to use the Convention Model as the QueryOptions can be applied to an Entity Framework query; returning fewer records between the database and the controller before returning it to the calling client as opposed to returning ALL records from the database and then filtering them in the service prior to returning them to the client.

I think you are confused there. There is zero difference between conventional and attribute routes when it comes to how OData operates: you can get the exact same feature-set no matter how your routes are being discovered.

Can you please elaborate on what you mean exactly that lead you to believe the QueryOptions wouldn't be able to be applied at the database level if not using conventional model?

Or maybe you are talking about EDM-less flow vs EDM flow? Even then however, you can still apply the query options to the database regardless of approach, so if you have an example you wanna share that would be great.

Steps to replicate: When running the ODataRoutingSample and opening the Swagger UI, execute the api/Accounts endpoint. Putting a breakpoint within the controller method does not get hit.

Would be nice if you could update the issue with all the necessary information.

I have never seen a sample using [EnableQuery] where the queryoptions can be applied to the databasecontext. I have only ever seen using ODataQueryOptions.

HuntJason commented 1 year ago

That is exactly the sample. If you navigate to the swaggerui and try and to execute the method, it will not work.

julealgon commented 1 year ago

I have never seen a sample using [EnableQuery] where the queryoptions can be applied to the databasecontext. I have only ever seen using ODataQueryOptions.

I'm surprised to hear that, as that is by far the most used flow with OData, as it is the simplest.

As long as you return an IQueryable<T> from your controller, the filters automatically applied via [EnableQuery] will all be applied at the expression level, which will all be translated directly to the database. There is no reason for you to manually handle an ODataQueryOptions<T> instance unless you are doing something that requires finer grained control of operations or application of the options.

That is exactly the sample. If you navigate to the swaggerui and try and to execute the method, it will not work.

Swagger as it is in that sample project, does not properly recognize the ODataQueryOptions object and generates a garbage URL. Notice that when you are calling from swagger, this is what is happening:

curl -X 'GET' \ 'http://localhost:64771/api/Accounts?request[httpContext][request]=string&request[httpContext][response][httpContext]=string&request[httpContext][response][statusCode]=0&request[httpContext][response][body][position]=0&request[httpContext][response][body][readTimeout]=0&request[httpContext][response][body][writeTimeout]=0&request[httpContext][response][contentLength]=0&request[httpContext][response][contentType]=string&request[httpContext][connection][id]=string&request[httpContext][connection][remoteIpAddress][addressFamily]=0&request[httpContext][connection][remoteIpAddress][scopeId]=0&request[httpContext][connection][remotePort]=0&request[httpContext][connection][localIpAddress][addressFamily]=0&request[httpContext][connection][localIpAddress][scopeId]=0&request[httpContext][connection][localPort]=0&request[httpContext][connection][clientCertificate][archived]=true&request[httpContext][connection][clientCertificate][friendlyName]=string&request[httpContext][connection][clientCertificate][privateKey][keySize]=0&request[httpContext][connection][clientCertificate][issuerName][oid][value]=string&request[httpContext][connection][clientCertificate][issuerName][oid][friendlyName]=string&request[httpContext][connection][clientCertificate][issuerName][rawData]=string&request[httpContext][connection][clientCertificate][publicKey][encodedKeyValue][oid][value]=string&request[httpContext][connection][clientCertificate][publicKey][encodedKeyValue][oid][friendlyName]=string&request[httpContext][connection][clientCertificate][publicKey][encodedKeyValue][rawData]=string&request[httpContext][connection][clientCertificate][publicKey][encodedParameters][oid][value]=string&request[httpContext][connection][clientCertificate][publicKey][encodedParameters][oid][friendlyName]=string&request[httpContext][connection][clientCertificate][publicKey][encodedParameters][rawData]=string&request[httpContext][connection][clientCertificate][publicKey][key][keySize]=0&request[httpContext][connection][clientCertificate][publicKey][oid][value]=string&request[httpContext][connection][clientCertificate][publicKey][oid][friendlyName]=string&request[httpContext][connection][clientCertificate][signatureAlgorithm][value]=string&request[httpContext][connection][clientCertificate][signatureAlgorithm][friendlyName]=string&request[httpContext][connection][clientCertificate][subjectName][oid][value]=string&request[httpContext][connection][clientCertificate][subjectName][oid][friendlyName]=string&request[httpContext][connection][clientCertificate][subjectName][rawData]=string&request[httpContext][items][additionalProp1]=string&request[httpContext][items][additionalProp2]=string&request[httpContext][items][additionalProp3]=string&request[httpContext][traceIdentifier]=string&request[method]=string&request[scheme]=string&request[isHttps]=true&request[host][value]=string&request[pathBase][value]=string&request[path][value]=string&request[queryString][value]=string&request[query][key]=string&request[query][value]=string&request[protocol]=string&request[cookies][key]=string&request[cookies][value]=string&request[contentLength]=0&request[contentType]=string&request[body][position]=0&request[body][readTimeout]=0&request[body][writeTimeout]=0&request[form][key]=string&request[form][value]=string&request[routeValues][additionalProp1]=string&request[routeValues][additionalProp2]=string&request[routeValues][additionalProp3]=string&context[defaultQuerySettings][enableExpand]=true&context[defaultQuerySettings][enableSelect]=true&context[defaultQuerySettings][enableCount]=true&context[defaultQuerySettings][enableOrderBy]=true&context[defaultQuerySettings][enableFilter]=true&context[defaultQuerySettings][maxTop]=0&context[defaultQuerySettings][enableSkipToken]=true&context[model][entityContainer][schemaElementKind]=0&context[elementType][typeKind]=0&context[navigationSource][path][expressionKind]=0&context[navigationSource][type][typeKind]=0&context[elementClrType][memberType]=1&context[elementClrType][assembly][entryPoint][declaringType]=string&context[elementClrType][assembly][entryPoint][reflectedType]=string&context[elementClrType][assembly][entryPoint][module][assembly]=string&context[elementClrType][assembly][entryPoint][attributes]=0&context[elementClrType][assembly][entryPoint][methodImplementationFlags]=0&context[elementClrType][assembly][entryPoint][callingConvention]=1&context[elementClrType][assembly][entryPoint][memberType]=1&context[elementClrType][assembly][entryPoint][returnParameter][attributes]=0&context[elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&context[elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&context[elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&context[elementClrType][assembly][entryPoint][returnParameter][member][module]=string&context[elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&context[elementClrType][assembly][entryPoint][returnType]=string&context[elementClrType][assembly][manifestModule][assembly]=string&context[elementClrType][assembly][securityRuleSet]=0&context[elementClrType][module][assembly]=string&context[elementClrType][declaringType]=string&context[elementClrType][declaringMethod][memberType]=1&context[elementClrType][declaringMethod][declaringType]=string&context[elementClrType][declaringMethod][reflectedType]=string&context[elementClrType][declaringMethod][module][assembly]=string&context[elementClrType][declaringMethod][attributes]=0&context[elementClrType][declaringMethod][methodImplementationFlags]=0&context[elementClrType][declaringMethod][callingConvention]=1&context[elementClrType][reflectedType]=string&context[elementClrType][underlyingSystemType]=string&context[elementClrType][genericParameterAttributes]=0&context[elementClrType][attributes]=0&context[elementClrType][structLayoutAttribute][value]=0&context[elementClrType][typeInitializer][declaringType]=string&context[elementClrType][typeInitializer][reflectedType]=string&context[elementClrType][typeInitializer][module]=string&context[elementClrType][typeInitializer][attributes]=0&context[elementClrType][typeInitializer][methodImplementationFlags]=0&context[elementClrType][typeInitializer][callingConvention]=1&context[elementClrType][typeInitializer][memberType]=1&context[elementClrType][baseType]=string&context[path][edmType][typeKind]=0&context[path][identifier]=string&selectExpand[context][defaultQuerySettings][enableExpand]=true&selectExpand[context][defaultQuerySettings][enableSelect]=true&selectExpand[context][defaultQuerySettings][enableCount]=true&selectExpand[context][defaultQuerySettings][enableOrderBy]=true&selectExpand[context][defaultQuerySettings][enableFilter]=true&selectExpand[context][defaultQuerySettings][maxTop]=0&selectExpand[context][defaultQuerySettings][enableSkipToken]=true&selectExpand[context][model][entityContainer][schemaElementKind]=0&selectExpand[context][elementType][typeKind]=0&selectExpand[context][navigationSource][path][expressionKind]=0&selectExpand[context][navigationSource][type][typeKind]=0&selectExpand[context][elementClrType][memberType]=1&selectExpand[context][elementClrType][assembly][entryPoint][declaringType]=string&selectExpand[context][elementClrType][assembly][entryPoint][reflectedType]=string&selectExpand[context][elementClrType][assembly][entryPoint][module][assembly]=string&selectExpand[context][elementClrType][assembly][entryPoint][attributes]=0&selectExpand[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&selectExpand[context][elementClrType][assembly][entryPoint][callingConvention]=1&selectExpand[context][elementClrType][assembly][entryPoint][memberType]=1&selectExpand[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&selectExpand[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&selectExpand[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&selectExpand[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&selectExpand[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&selectExpand[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&selectExpand[context][elementClrType][assembly][entryPoint][returnType]=string&selectExpand[context][elementClrType][assembly][manifestModule][assembly]=string&selectExpand[context][elementClrType][assembly][securityRuleSet]=0&selectExpand[context][elementClrType][module][assembly]=string&selectExpand[context][elementClrType][declaringType]=string&selectExpand[context][elementClrType][declaringMethod][memberType]=1&selectExpand[context][elementClrType][declaringMethod][declaringType]=string&selectExpand[context][elementClrType][declaringMethod][reflectedType]=string&selectExpand[context][elementClrType][declaringMethod][module][assembly]=string&selectExpand[context][elementClrType][declaringMethod][attributes]=0&selectExpand[context][elementClrType][declaringMethod][methodImplementationFlags]=0&selectExpand[context][elementClrType][declaringMethod][callingConvention]=1&selectExpand[context][elementClrType][reflectedType]=string&selectExpand[context][elementClrType][underlyingSystemType]=string&selectExpand[context][elementClrType][genericParameterAttributes]=0&selectExpand[context][elementClrType][attributes]=0&selectExpand[context][elementClrType][structLayoutAttribute][value]=0&selectExpand[context][elementClrType][typeInitializer][declaringType]=string&selectExpand[context][elementClrType][typeInitializer][reflectedType]=string&selectExpand[context][elementClrType][typeInitializer][module]=string&selectExpand[context][elementClrType][typeInitializer][attributes]=0&selectExpand[context][elementClrType][typeInitializer][methodImplementationFlags]=0&selectExpand[context][elementClrType][typeInitializer][callingConvention]=1&selectExpand[context][elementClrType][typeInitializer][memberType]=1&selectExpand[context][elementClrType][baseType]=string&selectExpand[context][path][edmType][typeKind]=0&selectExpand[context][path][identifier]=string&selectExpand[compute][context][defaultQuerySettings][enableExpand]=true&selectExpand[compute][context][defaultQuerySettings][enableSelect]=true&selectExpand[compute][context][defaultQuerySettings][enableCount]=true&selectExpand[compute][context][defaultQuerySettings][enableOrderBy]=true&selectExpand[compute][context][defaultQuerySettings][enableFilter]=true&selectExpand[compute][context][defaultQuerySettings][maxTop]=0&selectExpand[compute][context][defaultQuerySettings][enableSkipToken]=true&selectExpand[compute][context][model][entityContainer][schemaElementKind]=0&selectExpand[compute][context][elementType][typeKind]=0&selectExpand[compute][context][navigationSource][path][expressionKind]=0&selectExpand[compute][context][navigationSource][type][typeKind]=0&selectExpand[compute][context][elementClrType][memberType]=1&selectExpand[compute][context][elementClrType][assembly][entryPoint][declaringType]=string&selectExpand[compute][context][elementClrType][assembly][entryPoint][reflectedType]=string&selectExpand[compute][context][elementClrType][assembly][entryPoint][module][assembly]=string&selectExpand[compute][context][elementClrType][assembly][entryPoint][attributes]=0&selectExpand[compute][context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&selectExpand[compute][context][elementClrType][assembly][entryPoint][callingConvention]=1&selectExpand[compute][context][elementClrType][assembly][entryPoint][memberType]=1&selectExpand[compute][context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&selectExpand[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&selectExpand[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&selectExpand[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&selectExpand[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&selectExpand[compute][context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&selectExpand[compute][context][elementClrType][assembly][entryPoint][returnType]=string&selectExpand[compute][context][elementClrType][assembly][manifestModule][assembly]=string&selectExpand[compute][context][elementClrType][assembly][securityRuleSet]=0&selectExpand[compute][context][elementClrType][module][assembly]=string&selectExpand[compute][context][elementClrType][declaringType]=string&selectExpand[compute][context][elementClrType][declaringMethod][memberType]=1&selectExpand[compute][context][elementClrType][declaringMethod][declaringType]=string&selectExpand[compute][context][elementClrType][declaringMethod][reflectedType]=string&selectExpand[compute][context][elementClrType][declaringMethod][module][assembly]=string&selectExpand[compute][context][elementClrType][declaringMethod][attributes]=0&selectExpand[compute][context][elementClrType][declaringMethod][methodImplementationFlags]=0&selectExpand[compute][context][elementClrType][declaringMethod][callingConvention]=1&selectExpand[compute][context][elementClrType][reflectedType]=string&selectExpand[compute][context][elementClrType][underlyingSystemType]=string&selectExpand[compute][context][elementClrType][genericParameterAttributes]=0&selectExpand[compute][context][elementClrType][attributes]=0&selectExpand[compute][context][elementClrType][structLayoutAttribute][value]=0&selectExpand[compute][context][elementClrType][typeInitializer][declaringType]=string&selectExpand[compute][context][elementClrType][typeInitializer][reflectedType]=string&selectExpand[compute][context][elementClrType][typeInitializer][module]=string&selectExpand[compute][context][elementClrType][typeInitializer][attributes]=0&selectExpand[compute][context][elementClrType][typeInitializer][methodImplementationFlags]=0&selectExpand[compute][context][elementClrType][typeInitializer][callingConvention]=1&selectExpand[compute][context][elementClrType][typeInitializer][memberType]=1&selectExpand[compute][context][elementClrType][baseType]=string&selectExpand[compute][context][path][edmType][typeKind]=0&selectExpand[compute][context][path][identifier]=string&selectExpand[compute][resultClrType][memberType]=1&selectExpand[compute][resultClrType][assembly][entryPoint][declaringType]=string&selectExpand[compute][resultClrType][assembly][entryPoint][reflectedType]=string&selectExpand[compute][resultClrType][assembly][entryPoint][module][assembly]=string&selectExpand[compute][resultClrType][assembly][entryPoint][attributes]=0&selectExpand[compute][resultClrType][assembly][entryPoint][methodImplementationFlags]=0&selectExpand[compute][resultClrType][assembly][entryPoint][callingConvention]=1&selectExpand[compute][resultClrType][assembly][entryPoint][memberType]=1&selectExpand[compute][resultClrType][assembly][entryPoint][returnParameter][attributes]=0&selectExpand[compute][resultClrType][assembly][entryPoint][returnParameter][member][memberType]=1&selectExpand[compute][resultClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&selectExpand[compute][resultClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&selectExpand[compute][resultClrType][assembly][entryPoint][returnParameter][member][module]=string&selectExpand[compute][resultClrType][assembly][entryPoint][returnParameter][parameterType]=string&selectExpand[compute][resultClrType][assembly][entryPoint][returnType]=string&selectExpand[compute][resultClrType][assembly][manifestModule][assembly]=string&selectExpand[compute][resultClrType][assembly][securityRuleSet]=0&selectExpand[compute][resultClrType][module][assembly]=string&selectExpand[compute][resultClrType][declaringType]=string&selectExpand[compute][resultClrType][declaringMethod][memberType]=1&selectExpand[compute][resultClrType][declaringMethod][declaringType]=string&selectExpand[compute][resultClrType][declaringMethod][reflectedType]=string&selectExpand[compute][resultClrType][declaringMethod][module][assembly]=string&selectExpand[compute][resultClrType][declaringMethod][attributes]=0&selectExpand[compute][resultClrType][declaringMethod][methodImplementationFlags]=0&selectExpand[compute][resultClrType][declaringMethod][callingConvention]=1&selectExpand[compute][resultClrType][reflectedType]=string&selectExpand[compute][resultClrType][underlyingSystemType]=string&selectExpand[compute][resultClrType][genericParameterAttributes]=0&selectExpand[compute][resultClrType][attributes]=0&selectExpand[compute][resultClrType][structLayoutAttribute][value]=0&selectExpand[compute][resultClrType][typeInitializer][declaringType]=string&selectExpand[compute][resultClrType][typeInitializer][reflectedType]=string&selectExpand[compute][resultClrType][typeInitializer][module]=string&selectExpand[compute][resultClrType][typeInitializer][attributes]=0&selectExpand[compute][resultClrType][typeInitializer][methodImplementationFlags]=0&selectExpand[compute][resultClrType][typeInitializer][callingConvention]=1&selectExpand[compute][resultClrType][typeInitializer][memberType]=1&selectExpand[compute][resultClrType][baseType]=string&selectExpand[compute][computeClause][computedItems][expression][typeReference][definition][typeKind]=0&selectExpand[compute][computeClause][computedItems][expression][kind]=0&selectExpand[compute][computeClause][computedItems][alias]=string&selectExpand[compute][computeClause][computedItems][typeReference][definition][typeKind]=0&selectExpand[compute][rawValue]=string&selectExpand[selectExpandClause][allSelected]=true&selectExpand[levelsMaxLiteralExpansionDepth]=0&apply[context][defaultQuerySettings][enableExpand]=true&apply[context][defaultQuerySettings][enableSelect]=true&apply[context][defaultQuerySettings][enableCount]=true&apply[context][defaultQuerySettings][enableOrderBy]=true&apply[context][defaultQuerySettings][enableFilter]=true&apply[context][defaultQuerySettings][maxTop]=0&apply[context][defaultQuerySettings][enableSkipToken]=true&apply[context][model][entityContainer][schemaElementKind]=0&apply[context][elementType][typeKind]=0&apply[context][navigationSource][path][expressionKind]=0&apply[context][navigationSource][type][typeKind]=0&apply[context][elementClrType][memberType]=1&apply[context][elementClrType][assembly][entryPoint][declaringType]=string&apply[context][elementClrType][assembly][entryPoint][reflectedType]=string&apply[context][elementClrType][assembly][entryPoint][module][assembly]=string&apply[context][elementClrType][assembly][entryPoint][attributes]=0&apply[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&apply[context][elementClrType][assembly][entryPoint][callingConvention]=1&apply[context][elementClrType][assembly][entryPoint][memberType]=1&apply[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&apply[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&apply[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&apply[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&apply[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&apply[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&apply[context][elementClrType][assembly][entryPoint][returnType]=string&apply[context][elementClrType][assembly][manifestModule][assembly]=string&apply[context][elementClrType][assembly][securityRuleSet]=0&apply[context][elementClrType][module][assembly]=string&apply[context][elementClrType][declaringType]=string&apply[context][elementClrType][declaringMethod][memberType]=1&apply[context][elementClrType][declaringMethod][declaringType]=string&apply[context][elementClrType][declaringMethod][reflectedType]=string&apply[context][elementClrType][declaringMethod][module][assembly]=string&apply[context][elementClrType][declaringMethod][attributes]=0&apply[context][elementClrType][declaringMethod][methodImplementationFlags]=0&apply[context][elementClrType][declaringMethod][callingConvention]=1&apply[context][elementClrType][reflectedType]=string&apply[context][elementClrType][underlyingSystemType]=string&apply[context][elementClrType][genericParameterAttributes]=0&apply[context][elementClrType][attributes]=0&apply[context][elementClrType][structLayoutAttribute][value]=0&apply[context][elementClrType][typeInitializer][declaringType]=string&apply[context][elementClrType][typeInitializer][reflectedType]=string&apply[context][elementClrType][typeInitializer][module]=string&apply[context][elementClrType][typeInitializer][attributes]=0&apply[context][elementClrType][typeInitializer][methodImplementationFlags]=0&apply[context][elementClrType][typeInitializer][callingConvention]=1&apply[context][elementClrType][typeInitializer][memberType]=1&apply[context][elementClrType][baseType]=string&apply[context][path][edmType][typeKind]=0&apply[context][path][identifier]=string&apply[resultClrType][memberType]=1&apply[resultClrType][assembly][entryPoint][declaringType]=string&apply[resultClrType][assembly][entryPoint][reflectedType]=string&apply[resultClrType][assembly][entryPoint][module][assembly]=string&apply[resultClrType][assembly][entryPoint][attributes]=0&apply[resultClrType][assembly][entryPoint][methodImplementationFlags]=0&apply[resultClrType][assembly][entryPoint][callingConvention]=1&apply[resultClrType][assembly][entryPoint][memberType]=1&apply[resultClrType][assembly][entryPoint][returnParameter][attributes]=0&apply[resultClrType][assembly][entryPoint][returnParameter][member][memberType]=1&apply[resultClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&apply[resultClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&apply[resultClrType][assembly][entryPoint][returnParameter][member][module]=string&apply[resultClrType][assembly][entryPoint][returnParameter][parameterType]=string&apply[resultClrType][assembly][entryPoint][returnType]=string&apply[resultClrType][assembly][manifestModule][assembly]=string&apply[resultClrType][assembly][securityRuleSet]=0&apply[resultClrType][module][assembly]=string&apply[resultClrType][declaringType]=string&apply[resultClrType][declaringMethod][memberType]=1&apply[resultClrType][declaringMethod][declaringType]=string&apply[resultClrType][declaringMethod][reflectedType]=string&apply[resultClrType][declaringMethod][module][assembly]=string&apply[resultClrType][declaringMethod][attributes]=0&apply[resultClrType][declaringMethod][methodImplementationFlags]=0&apply[resultClrType][declaringMethod][callingConvention]=1&apply[resultClrType][reflectedType]=string&apply[resultClrType][underlyingSystemType]=string&apply[resultClrType][genericParameterAttributes]=0&apply[resultClrType][attributes]=0&apply[resultClrType][structLayoutAttribute][value]=0&apply[resultClrType][typeInitializer][declaringType]=string&apply[resultClrType][typeInitializer][reflectedType]=string&apply[resultClrType][typeInitializer][module]=string&apply[resultClrType][typeInitializer][attributes]=0&apply[resultClrType][typeInitializer][methodImplementationFlags]=0&apply[resultClrType][typeInitializer][callingConvention]=1&apply[resultClrType][typeInitializer][memberType]=1&apply[resultClrType][baseType]=string&apply[applyClause][transformations][kind]=0&apply[rawValue]=string&compute[context][defaultQuerySettings][enableExpand]=true&compute[context][defaultQuerySettings][enableSelect]=true&compute[context][defaultQuerySettings][enableCount]=true&compute[context][defaultQuerySettings][enableOrderBy]=true&compute[context][defaultQuerySettings][enableFilter]=true&compute[context][defaultQuerySettings][maxTop]=0&compute[context][defaultQuerySettings][enableSkipToken]=true&compute[context][model][entityContainer][schemaElementKind]=0&compute[context][elementType][typeKind]=0&compute[context][navigationSource][path][expressionKind]=0&compute[context][navigationSource][type][typeKind]=0&compute[context][elementClrType][memberType]=1&compute[context][elementClrType][assembly][entryPoint][declaringType]=string&compute[context][elementClrType][assembly][entryPoint][reflectedType]=string&compute[context][elementClrType][assembly][entryPoint][module][assembly]=string&compute[context][elementClrType][assembly][entryPoint][attributes]=0&compute[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&compute[context][elementClrType][assembly][entryPoint][callingConvention]=1&compute[context][elementClrType][assembly][entryPoint][memberType]=1&compute[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&compute[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&compute[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&compute[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&compute[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&compute[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&compute[context][elementClrType][assembly][entryPoint][returnType]=string&compute[context][elementClrType][assembly][manifestModule][assembly]=string&compute[context][elementClrType][assembly][securityRuleSet]=0&compute[context][elementClrType][module][assembly]=string&compute[context][elementClrType][declaringType]=string&compute[context][elementClrType][declaringMethod][memberType]=1&compute[context][elementClrType][declaringMethod][declaringType]=string&compute[context][elementClrType][declaringMethod][reflectedType]=string&compute[context][elementClrType][declaringMethod][module][assembly]=string&compute[context][elementClrType][declaringMethod][attributes]=0&compute[context][elementClrType][declaringMethod][methodImplementationFlags]=0&compute[context][elementClrType][declaringMethod][callingConvention]=1&compute[context][elementClrType][reflectedType]=string&compute[context][elementClrType][underlyingSystemType]=string&compute[context][elementClrType][genericParameterAttributes]=0&compute[context][elementClrType][attributes]=0&compute[context][elementClrType][structLayoutAttribute][value]=0&compute[context][elementClrType][typeInitializer][declaringType]=string&compute[context][elementClrType][typeInitializer][reflectedType]=string&compute[context][elementClrType][typeInitializer][module]=string&compute[context][elementClrType][typeInitializer][attributes]=0&compute[context][elementClrType][typeInitializer][methodImplementationFlags]=0&compute[context][elementClrType][typeInitializer][callingConvention]=1&compute[context][elementClrType][typeInitializer][memberType]=1&compute[context][elementClrType][baseType]=string&compute[context][path][edmType][typeKind]=0&compute[context][path][identifier]=string&compute[resultClrType][memberType]=1&compute[resultClrType][assembly][entryPoint][declaringType]=string&compute[resultClrType][assembly][entryPoint][reflectedType]=string&compute[resultClrType][assembly][entryPoint][module][assembly]=string&compute[resultClrType][assembly][entryPoint][attributes]=0&compute[resultClrType][assembly][entryPoint][methodImplementationFlags]=0&compute[resultClrType][assembly][entryPoint][callingConvention]=1&compute[resultClrType][assembly][entryPoint][memberType]=1&compute[resultClrType][assembly][entryPoint][returnParameter][attributes]=0&compute[resultClrType][assembly][entryPoint][returnParameter][member][memberType]=1&compute[resultClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&compute[resultClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&compute[resultClrType][assembly][entryPoint][returnParameter][member][module]=string&compute[resultClrType][assembly][entryPoint][returnParameter][parameterType]=string&compute[resultClrType][assembly][entryPoint][returnType]=string&compute[resultClrType][assembly][manifestModule][assembly]=string&compute[resultClrType][assembly][securityRuleSet]=0&compute[resultClrType][module][assembly]=string&compute[resultClrType][declaringType]=string&compute[resultClrType][declaringMethod][memberType]=1&compute[resultClrType][declaringMethod][declaringType]=string&compute[resultClrType][declaringMethod][reflectedType]=string&compute[resultClrType][declaringMethod][module][assembly]=string&compute[resultClrType][declaringMethod][attributes]=0&compute[resultClrType][declaringMethod][methodImplementationFlags]=0&compute[resultClrType][declaringMethod][callingConvention]=1&compute[resultClrType][reflectedType]=string&compute[resultClrType][underlyingSystemType]=string&compute[resultClrType][genericParameterAttributes]=0&compute[resultClrType][attributes]=0&compute[resultClrType][structLayoutAttribute][value]=0&compute[resultClrType][typeInitializer][declaringType]=string&compute[resultClrType][typeInitializer][reflectedType]=string&compute[resultClrType][typeInitializer][module]=string&compute[resultClrType][typeInitializer][attributes]=0&compute[resultClrType][typeInitializer][methodImplementationFlags]=0&compute[resultClrType][typeInitializer][callingConvention]=1&compute[resultClrType][typeInitializer][memberType]=1&compute[resultClrType][baseType]=string&compute[computeClause][computedItems][expression][typeReference][definition][typeKind]=0&compute[computeClause][computedItems][expression][kind]=0&compute[computeClause][computedItems][alias]=string&compute[computeClause][computedItems][typeReference][definition][typeKind]=0&compute[rawValue]=string&filter[context][defaultQuerySettings][enableExpand]=true&filter[context][defaultQuerySettings][enableSelect]=true&filter[context][defaultQuerySettings][enableCount]=true&filter[context][defaultQuerySettings][enableOrderBy]=true&filter[context][defaultQuerySettings][enableFilter]=true&filter[context][defaultQuerySettings][maxTop]=0&filter[context][defaultQuerySettings][enableSkipToken]=true&filter[context][model][entityContainer][schemaElementKind]=0&filter[context][elementType][typeKind]=0&filter[context][navigationSource][path][expressionKind]=0&filter[context][navigationSource][type][typeKind]=0&filter[context][elementClrType][memberType]=1&filter[context][elementClrType][assembly][entryPoint][declaringType]=string&filter[context][elementClrType][assembly][entryPoint][reflectedType]=string&filter[context][elementClrType][assembly][entryPoint][module][assembly]=string&filter[context][elementClrType][assembly][entryPoint][attributes]=0&filter[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&filter[context][elementClrType][assembly][entryPoint][callingConvention]=1&filter[context][elementClrType][assembly][entryPoint][memberType]=1&filter[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&filter[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&filter[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&filter[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&filter[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&filter[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&filter[context][elementClrType][assembly][entryPoint][returnType]=string&filter[context][elementClrType][assembly][manifestModule][assembly]=string&filter[context][elementClrType][assembly][securityRuleSet]=0&filter[context][elementClrType][module][assembly]=string&filter[context][elementClrType][declaringType]=string&filter[context][elementClrType][declaringMethod][memberType]=1&filter[context][elementClrType][declaringMethod][declaringType]=string&filter[context][elementClrType][declaringMethod][reflectedType]=string&filter[context][elementClrType][declaringMethod][module][assembly]=string&filter[context][elementClrType][declaringMethod][attributes]=0&filter[context][elementClrType][declaringMethod][methodImplementationFlags]=0&filter[context][elementClrType][declaringMethod][callingConvention]=1&filter[context][elementClrType][reflectedType]=string&filter[context][elementClrType][underlyingSystemType]=string&filter[context][elementClrType][genericParameterAttributes]=0&filter[context][elementClrType][attributes]=0&filter[context][elementClrType][structLayoutAttribute][value]=0&filter[context][elementClrType][typeInitializer][declaringType]=string&filter[context][elementClrType][typeInitializer][reflectedType]=string&filter[context][elementClrType][typeInitializer][module]=string&filter[context][elementClrType][typeInitializer][attributes]=0&filter[context][elementClrType][typeInitializer][methodImplementationFlags]=0&filter[context][elementClrType][typeInitializer][callingConvention]=1&filter[context][elementClrType][typeInitializer][memberType]=1&filter[context][elementClrType][baseType]=string&filter[context][path][edmType][typeKind]=0&filter[context][path][identifier]=string&filter[compute][context][defaultQuerySettings][enableExpand]=true&filter[compute][context][defaultQuerySettings][enableSelect]=true&filter[compute][context][defaultQuerySettings][enableCount]=true&filter[compute][context][defaultQuerySettings][enableOrderBy]=true&filter[compute][context][defaultQuerySettings][enableFilter]=true&filter[compute][context][defaultQuerySettings][maxTop]=0&filter[compute][context][defaultQuerySettings][enableSkipToken]=true&filter[compute][context][model][entityContainer][schemaElementKind]=0&filter[compute][context][elementType][typeKind]=0&filter[compute][context][navigationSource][path][expressionKind]=0&filter[compute][context][navigationSource][type][typeKind]=0&filter[compute][context][elementClrType][memberType]=1&filter[compute][context][elementClrType][assembly][entryPoint][declaringType]=string&filter[compute][context][elementClrType][assembly][entryPoint][reflectedType]=string&filter[compute][context][elementClrType][assembly][entryPoint][module][assembly]=string&filter[compute][context][elementClrType][assembly][entryPoint][attributes]=0&filter[compute][context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&filter[compute][context][elementClrType][assembly][entryPoint][callingConvention]=1&filter[compute][context][elementClrType][assembly][entryPoint][memberType]=1&filter[compute][context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&filter[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&filter[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&filter[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&filter[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&filter[compute][context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&filter[compute][context][elementClrType][assembly][entryPoint][returnType]=string&filter[compute][context][elementClrType][assembly][manifestModule][assembly]=string&filter[compute][context][elementClrType][assembly][securityRuleSet]=0&filter[compute][context][elementClrType][module][assembly]=string&filter[compute][context][elementClrType][declaringType]=string&filter[compute][context][elementClrType][declaringMethod][memberType]=1&filter[compute][context][elementClrType][declaringMethod][declaringType]=string&filter[compute][context][elementClrType][declaringMethod][reflectedType]=string&filter[compute][context][elementClrType][declaringMethod][module][assembly]=string&filter[compute][context][elementClrType][declaringMethod][attributes]=0&filter[compute][context][elementClrType][declaringMethod][methodImplementationFlags]=0&filter[compute][context][elementClrType][declaringMethod][callingConvention]=1&filter[compute][context][elementClrType][reflectedType]=string&filter[compute][context][elementClrType][underlyingSystemType]=string&filter[compute][context][elementClrType][genericParameterAttributes]=0&filter[compute][context][elementClrType][attributes]=0&filter[compute][context][elementClrType][structLayoutAttribute][value]=0&filter[compute][context][elementClrType][typeInitializer][declaringType]=string&filter[compute][context][elementClrType][typeInitializer][reflectedType]=string&filter[compute][context][elementClrType][typeInitializer][module]=string&filter[compute][context][elementClrType][typeInitializer][attributes]=0&filter[compute][context][elementClrType][typeInitializer][methodImplementationFlags]=0&filter[compute][context][elementClrType][typeInitializer][callingConvention]=1&filter[compute][context][elementClrType][typeInitializer][memberType]=1&filter[compute][context][elementClrType][baseType]=string&filter[compute][context][path][edmType][typeKind]=0&filter[compute][context][path][identifier]=string&filter[compute][resultClrType][memberType]=1&filter[compute][resultClrType][assembly][entryPoint][declaringType]=string&filter[compute][resultClrType][assembly][entryPoint][reflectedType]=string&filter[compute][resultClrType][assembly][entryPoint][module][assembly]=string&filter[compute][resultClrType][assembly][entryPoint][attributes]=0&filter[compute][resultClrType][assembly][entryPoint][methodImplementationFlags]=0&filter[compute][resultClrType][assembly][entryPoint][callingConvention]=1&filter[compute][resultClrType][assembly][entryPoint][memberType]=1&filter[compute][resultClrType][assembly][entryPoint][returnParameter][attributes]=0&filter[compute][resultClrType][assembly][entryPoint][returnParameter][member][memberType]=1&filter[compute][resultClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&filter[compute][resultClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&filter[compute][resultClrType][assembly][entryPoint][returnParameter][member][module]=string&filter[compute][resultClrType][assembly][entryPoint][returnParameter][parameterType]=string&filter[compute][resultClrType][assembly][entryPoint][returnType]=string&filter[compute][resultClrType][assembly][manifestModule][assembly]=string&filter[compute][resultClrType][assembly][securityRuleSet]=0&filter[compute][resultClrType][module][assembly]=string&filter[compute][resultClrType][declaringType]=string&filter[compute][resultClrType][declaringMethod][memberType]=1&filter[compute][resultClrType][declaringMethod][declaringType]=string&filter[compute][resultClrType][declaringMethod][reflectedType]=string&filter[compute][resultClrType][declaringMethod][module][assembly]=string&filter[compute][resultClrType][declaringMethod][attributes]=0&filter[compute][resultClrType][declaringMethod][methodImplementationFlags]=0&filter[compute][resultClrType][declaringMethod][callingConvention]=1&filter[compute][resultClrType][reflectedType]=string&filter[compute][resultClrType][underlyingSystemType]=string&filter[compute][resultClrType][genericParameterAttributes]=0&filter[compute][resultClrType][attributes]=0&filter[compute][resultClrType][structLayoutAttribute][value]=0&filter[compute][resultClrType][typeInitializer][declaringType]=string&filter[compute][resultClrType][typeInitializer][reflectedType]=string&filter[compute][resultClrType][typeInitializer][module]=string&filter[compute][resultClrType][typeInitializer][attributes]=0&filter[compute][resultClrType][typeInitializer][methodImplementationFlags]=0&filter[compute][resultClrType][typeInitializer][callingConvention]=1&filter[compute][resultClrType][typeInitializer][memberType]=1&filter[compute][resultClrType][baseType]=string&filter[compute][computeClause][computedItems][expression][typeReference][definition][typeKind]=0&filter[compute][computeClause][computedItems][expression][kind]=0&filter[compute][computeClause][computedItems][alias]=string&filter[compute][computeClause][computedItems][typeReference][definition][typeKind]=0&filter[compute][rawValue]=string&filter[filterClause][expression][typeReference][definition][typeKind]=0&filter[filterClause][expression][kind]=0&filter[filterClause][rangeVariable][typeReference][definition][typeKind]=0&filter[filterClause][itemType][definition][typeKind]=0&filter[rawValue]=string&search[context][defaultQuerySettings][enableExpand]=true&search[context][defaultQuerySettings][enableSelect]=true&search[context][defaultQuerySettings][enableCount]=true&search[context][defaultQuerySettings][enableOrderBy]=true&search[context][defaultQuerySettings][enableFilter]=true&search[context][defaultQuerySettings][maxTop]=0&search[context][defaultQuerySettings][enableSkipToken]=true&search[context][model][entityContainer][schemaElementKind]=0&search[context][elementType][typeKind]=0&search[context][navigationSource][path][expressionKind]=0&search[context][navigationSource][type][typeKind]=0&search[context][elementClrType][memberType]=1&search[context][elementClrType][assembly][entryPoint][declaringType]=string&search[context][elementClrType][assembly][entryPoint][reflectedType]=string&search[context][elementClrType][assembly][entryPoint][module][assembly]=string&search[context][elementClrType][assembly][entryPoint][attributes]=0&search[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&search[context][elementClrType][assembly][entryPoint][callingConvention]=1&search[context][elementClrType][assembly][entryPoint][memberType]=1&search[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&search[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&search[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&search[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&search[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&search[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&search[context][elementClrType][assembly][entryPoint][returnType]=string&search[context][elementClrType][assembly][manifestModule][assembly]=string&search[context][elementClrType][assembly][securityRuleSet]=0&search[context][elementClrType][module][assembly]=string&search[context][elementClrType][declaringType]=string&search[context][elementClrType][declaringMethod][memberType]=1&search[context][elementClrType][declaringMethod][declaringType]=string&search[context][elementClrType][declaringMethod][reflectedType]=string&search[context][elementClrType][declaringMethod][module][assembly]=string&search[context][elementClrType][declaringMethod][attributes]=0&search[context][elementClrType][declaringMethod][methodImplementationFlags]=0&search[context][elementClrType][declaringMethod][callingConvention]=1&search[context][elementClrType][reflectedType]=string&search[context][elementClrType][underlyingSystemType]=string&search[context][elementClrType][genericParameterAttributes]=0&search[context][elementClrType][attributes]=0&search[context][elementClrType][structLayoutAttribute][value]=0&search[context][elementClrType][typeInitializer][declaringType]=string&search[context][elementClrType][typeInitializer][reflectedType]=string&search[context][elementClrType][typeInitializer][module]=string&search[context][elementClrType][typeInitializer][attributes]=0&search[context][elementClrType][typeInitializer][methodImplementationFlags]=0&search[context][elementClrType][typeInitializer][callingConvention]=1&search[context][elementClrType][typeInitializer][memberType]=1&search[context][elementClrType][baseType]=string&search[context][path][edmType][typeKind]=0&search[context][path][identifier]=string&search[resultClrType][memberType]=1&search[resultClrType][assembly][entryPoint][declaringType]=string&search[resultClrType][assembly][entryPoint][reflectedType]=string&search[resultClrType][assembly][entryPoint][module][assembly]=string&search[resultClrType][assembly][entryPoint][attributes]=0&search[resultClrType][assembly][entryPoint][methodImplementationFlags]=0&search[resultClrType][assembly][entryPoint][callingConvention]=1&search[resultClrType][assembly][entryPoint][memberType]=1&search[resultClrType][assembly][entryPoint][returnParameter][attributes]=0&search[resultClrType][assembly][entryPoint][returnParameter][member][memberType]=1&search[resultClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&search[resultClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&search[resultClrType][assembly][entryPoint][returnParameter][member][module]=string&search[resultClrType][assembly][entryPoint][returnParameter][parameterType]=string&search[resultClrType][assembly][entryPoint][returnType]=string&search[resultClrType][assembly][manifestModule][assembly]=string&search[resultClrType][assembly][securityRuleSet]=0&search[resultClrType][module][assembly]=string&search[resultClrType][declaringType]=string&search[resultClrType][declaringMethod][memberType]=1&search[resultClrType][declaringMethod][declaringType]=string&search[resultClrType][declaringMethod][reflectedType]=string&search[resultClrType][declaringMethod][module][assembly]=string&search[resultClrType][declaringMethod][attributes]=0&search[resultClrType][declaringMethod][methodImplementationFlags]=0&search[resultClrType][declaringMethod][callingConvention]=1&search[resultClrType][reflectedType]=string&search[resultClrType][underlyingSystemType]=string&search[resultClrType][genericParameterAttributes]=0&search[resultClrType][attributes]=0&search[resultClrType][structLayoutAttribute][value]=0&search[resultClrType][typeInitializer][declaringType]=string&search[resultClrType][typeInitializer][reflectedType]=string&search[resultClrType][typeInitializer][module]=string&search[resultClrType][typeInitializer][attributes]=0&search[resultClrType][typeInitializer][methodImplementationFlags]=0&search[resultClrType][typeInitializer][callingConvention]=1&search[resultClrType][typeInitializer][memberType]=1&search[resultClrType][baseType]=string&search[searchClause][expression][typeReference][definition][typeKind]=0&search[searchClause][expression][kind]=0&search[rawValue]=string&orderBy[context][defaultQuerySettings][enableExpand]=true&orderBy[context][defaultQuerySettings][enableSelect]=true&orderBy[context][defaultQuerySettings][enableCount]=true&orderBy[context][defaultQuerySettings][enableOrderBy]=true&orderBy[context][defaultQuerySettings][enableFilter]=true&orderBy[context][defaultQuerySettings][maxTop]=0&orderBy[context][defaultQuerySettings][enableSkipToken]=true&orderBy[context][model][entityContainer][schemaElementKind]=0&orderBy[context][elementType][typeKind]=0&orderBy[context][navigationSource][path][expressionKind]=0&orderBy[context][navigationSource][type][typeKind]=0&orderBy[context][elementClrType][memberType]=1&orderBy[context][elementClrType][assembly][entryPoint][declaringType]=string&orderBy[context][elementClrType][assembly][entryPoint][reflectedType]=string&orderBy[context][elementClrType][assembly][entryPoint][module][assembly]=string&orderBy[context][elementClrType][assembly][entryPoint][attributes]=0&orderBy[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&orderBy[context][elementClrType][assembly][entryPoint][callingConvention]=1&orderBy[context][elementClrType][assembly][entryPoint][memberType]=1&orderBy[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&orderBy[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&orderBy[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&orderBy[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&orderBy[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&orderBy[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&orderBy[context][elementClrType][assembly][entryPoint][returnType]=string&orderBy[context][elementClrType][assembly][manifestModule][assembly]=string&orderBy[context][elementClrType][assembly][securityRuleSet]=0&orderBy[context][elementClrType][module][assembly]=string&orderBy[context][elementClrType][declaringType]=string&orderBy[context][elementClrType][declaringMethod][memberType]=1&orderBy[context][elementClrType][declaringMethod][declaringType]=string&orderBy[context][elementClrType][declaringMethod][reflectedType]=string&orderBy[context][elementClrType][declaringMethod][module][assembly]=string&orderBy[context][elementClrType][declaringMethod][attributes]=0&orderBy[context][elementClrType][declaringMethod][methodImplementationFlags]=0&orderBy[context][elementClrType][declaringMethod][callingConvention]=1&orderBy[context][elementClrType][reflectedType]=string&orderBy[context][elementClrType][underlyingSystemType]=string&orderBy[context][elementClrType][genericParameterAttributes]=0&orderBy[context][elementClrType][attributes]=0&orderBy[context][elementClrType][structLayoutAttribute][value]=0&orderBy[context][elementClrType][typeInitializer][declaringType]=string&orderBy[context][elementClrType][typeInitializer][reflectedType]=string&orderBy[context][elementClrType][typeInitializer][module]=string&orderBy[context][elementClrType][typeInitializer][attributes]=0&orderBy[context][elementClrType][typeInitializer][methodImplementationFlags]=0&orderBy[context][elementClrType][typeInitializer][callingConvention]=1&orderBy[context][elementClrType][typeInitializer][memberType]=1&orderBy[context][elementClrType][baseType]=string&orderBy[context][path][edmType][typeKind]=0&orderBy[context][path][identifier]=string&orderBy[rawValue]=string&orderBy[compute][context][defaultQuerySettings][enableExpand]=true&orderBy[compute][context][defaultQuerySettings][enableSelect]=true&orderBy[compute][context][defaultQuerySettings][enableCount]=true&orderBy[compute][context][defaultQuerySettings][enableOrderBy]=true&orderBy[compute][context][defaultQuerySettings][enableFilter]=true&orderBy[compute][context][defaultQuerySettings][maxTop]=0&orderBy[compute][context][defaultQuerySettings][enableSkipToken]=true&orderBy[compute][context][model][entityContainer][schemaElementKind]=0&orderBy[compute][context][elementType][typeKind]=0&orderBy[compute][context][navigationSource][path][expressionKind]=0&orderBy[compute][context][navigationSource][type][typeKind]=0&orderBy[compute][context][elementClrType][memberType]=1&orderBy[compute][context][elementClrType][assembly][entryPoint][declaringType]=string&orderBy[compute][context][elementClrType][assembly][entryPoint][reflectedType]=string&orderBy[compute][context][elementClrType][assembly][entryPoint][module][assembly]=string&orderBy[compute][context][elementClrType][assembly][entryPoint][attributes]=0&orderBy[compute][context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&orderBy[compute][context][elementClrType][assembly][entryPoint][callingConvention]=1&orderBy[compute][context][elementClrType][assembly][entryPoint][memberType]=1&orderBy[compute][context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&orderBy[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&orderBy[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&orderBy[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&orderBy[compute][context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&orderBy[compute][context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&orderBy[compute][context][elementClrType][assembly][entryPoint][returnType]=string&orderBy[compute][context][elementClrType][assembly][manifestModule][assembly]=string&orderBy[compute][context][elementClrType][assembly][securityRuleSet]=0&orderBy[compute][context][elementClrType][module][assembly]=string&orderBy[compute][context][elementClrType][declaringType]=string&orderBy[compute][context][elementClrType][declaringMethod][memberType]=1&orderBy[compute][context][elementClrType][declaringMethod][declaringType]=string&orderBy[compute][context][elementClrType][declaringMethod][reflectedType]=string&orderBy[compute][context][elementClrType][declaringMethod][module][assembly]=string&orderBy[compute][context][elementClrType][declaringMethod][attributes]=0&orderBy[compute][context][elementClrType][declaringMethod][methodImplementationFlags]=0&orderBy[compute][context][elementClrType][declaringMethod][callingConvention]=1&orderBy[compute][context][elementClrType][reflectedType]=string&orderBy[compute][context][elementClrType][underlyingSystemType]=string&orderBy[compute][context][elementClrType][genericParameterAttributes]=0&orderBy[compute][context][elementClrType][attributes]=0&orderBy[compute][context][elementClrType][structLayoutAttribute][value]=0&orderBy[compute][context][elementClrType][typeInitializer][declaringType]=string&orderBy[compute][context][elementClrType][typeInitializer][reflectedType]=string&orderBy[compute][context][elementClrType][typeInitializer][module]=string&orderBy[compute][context][elementClrType][typeInitializer][attributes]=0&orderBy[compute][context][elementClrType][typeInitializer][methodImplementationFlags]=0&orderBy[compute][context][elementClrType][typeInitializer][callingConvention]=1&orderBy[compute][context][elementClrType][typeInitializer][memberType]=1&orderBy[compute][context][elementClrType][baseType]=string&orderBy[compute][context][path][edmType][typeKind]=0&orderBy[compute][context][path][identifier]=string&orderBy[compute][resultClrType][memberType]=1&orderBy[compute][resultClrType][assembly][entryPoint][declaringType]=string&orderBy[compute][resultClrType][assembly][entryPoint][reflectedType]=string&orderBy[compute][resultClrType][assembly][entryPoint][module][assembly]=string&orderBy[compute][resultClrType][assembly][entryPoint][attributes]=0&orderBy[compute][resultClrType][assembly][entryPoint][methodImplementationFlags]=0&orderBy[compute][resultClrType][assembly][entryPoint][callingConvention]=1&orderBy[compute][resultClrType][assembly][entryPoint][memberType]=1&orderBy[compute][resultClrType][assembly][entryPoint][returnParameter][attributes]=0&orderBy[compute][resultClrType][assembly][entryPoint][returnParameter][member][memberType]=1&orderBy[compute][resultClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&orderBy[compute][resultClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&orderBy[compute][resultClrType][assembly][entryPoint][returnParameter][member][module]=string&orderBy[compute][resultClrType][assembly][entryPoint][returnParameter][parameterType]=string&orderBy[compute][resultClrType][assembly][entryPoint][returnType]=string&orderBy[compute][resultClrType][assembly][manifestModule][assembly]=string&orderBy[compute][resultClrType][assembly][securityRuleSet]=0&orderBy[compute][resultClrType][module][assembly]=string&orderBy[compute][resultClrType][declaringType]=string&orderBy[compute][resultClrType][declaringMethod][memberType]=1&orderBy[compute][resultClrType][declaringMethod][declaringType]=string&orderBy[compute][resultClrType][declaringMethod][reflectedType]=string&orderBy[compute][resultClrType][declaringMethod][module][assembly]=string&orderBy[compute][resultClrType][declaringMethod][attributes]=0&orderBy[compute][resultClrType][declaringMethod][methodImplementationFlags]=0&orderBy[compute][resultClrType][declaringMethod][callingConvention]=1&orderBy[compute][resultClrType][reflectedType]=string&orderBy[compute][resultClrType][underlyingSystemType]=string&orderBy[compute][resultClrType][genericParameterAttributes]=0&orderBy[compute][resultClrType][attributes]=0&orderBy[compute][resultClrType][structLayoutAttribute][value]=0&orderBy[compute][resultClrType][typeInitializer][declaringType]=string&orderBy[compute][resultClrType][typeInitializer][reflectedType]=string&orderBy[compute][resultClrType][typeInitializer][module]=string&orderBy[compute][resultClrType][typeInitializer][attributes]=0&orderBy[compute][resultClrType][typeInitializer][methodImplementationFlags]=0&orderBy[compute][resultClrType][typeInitializer][callingConvention]=1&orderBy[compute][resultClrType][typeInitializer][memberType]=1&orderBy[compute][resultClrType][baseType]=string&orderBy[compute][computeClause][computedItems][expression][typeReference][definition][typeKind]=0&orderBy[compute][computeClause][computedItems][expression][kind]=0&orderBy[compute][computeClause][computedItems][alias]=string&orderBy[compute][computeClause][computedItems][typeReference][definition][typeKind]=0&orderBy[compute][rawValue]=string&orderBy[orderByClause][thenBy]=string&orderBy[orderByClause][expression][typeReference][definition][typeKind]=0&orderBy[orderByClause][expression][kind]=0&orderBy[orderByClause][direction]=0&orderBy[orderByClause][rangeVariable][typeReference][definition][typeKind]=0&orderBy[orderByClause][itemType][definition][typeKind]=0&skip[context][defaultQuerySettings][enableExpand]=true&skip[context][defaultQuerySettings][enableSelect]=true&skip[context][defaultQuerySettings][enableCount]=true&skip[context][defaultQuerySettings][enableOrderBy]=true&skip[context][defaultQuerySettings][enableFilter]=true&skip[context][defaultQuerySettings][maxTop]=0&skip[context][defaultQuerySettings][enableSkipToken]=true&skip[context][model][entityContainer][schemaElementKind]=0&skip[context][elementType][typeKind]=0&skip[context][navigationSource][path][expressionKind]=0&skip[context][navigationSource][type][typeKind]=0&skip[context][elementClrType][memberType]=1&skip[context][elementClrType][assembly][entryPoint][declaringType]=string&skip[context][elementClrType][assembly][entryPoint][reflectedType]=string&skip[context][elementClrType][assembly][entryPoint][module][assembly]=string&skip[context][elementClrType][assembly][entryPoint][attributes]=0&skip[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&skip[context][elementClrType][assembly][entryPoint][callingConvention]=1&skip[context][elementClrType][assembly][entryPoint][memberType]=1&skip[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&skip[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&skip[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&skip[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&skip[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&skip[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&skip[context][elementClrType][assembly][entryPoint][returnType]=string&skip[context][elementClrType][assembly][manifestModule][assembly]=string&skip[context][elementClrType][assembly][securityRuleSet]=0&skip[context][elementClrType][module][assembly]=string&skip[context][elementClrType][declaringType]=string&skip[context][elementClrType][declaringMethod][memberType]=1&skip[context][elementClrType][declaringMethod][declaringType]=string&skip[context][elementClrType][declaringMethod][reflectedType]=string&skip[context][elementClrType][declaringMethod][module][assembly]=string&skip[context][elementClrType][declaringMethod][attributes]=0&skip[context][elementClrType][declaringMethod][methodImplementationFlags]=0&skip[context][elementClrType][declaringMethod][callingConvention]=1&skip[context][elementClrType][reflectedType]=string&skip[context][elementClrType][underlyingSystemType]=string&skip[context][elementClrType][genericParameterAttributes]=0&skip[context][elementClrType][attributes]=0&skip[context][elementClrType][structLayoutAttribute][value]=0&skip[context][elementClrType][typeInitializer][declaringType]=string&skip[context][elementClrType][typeInitializer][reflectedType]=string&skip[context][elementClrType][typeInitializer][module]=string&skip[context][elementClrType][typeInitializer][attributes]=0&skip[context][elementClrType][typeInitializer][methodImplementationFlags]=0&skip[context][elementClrType][typeInitializer][callingConvention]=1&skip[context][elementClrType][typeInitializer][memberType]=1&skip[context][elementClrType][baseType]=string&skip[context][path][edmType][typeKind]=0&skip[context][path][identifier]=string&skip[rawValue]=string&skipToken[rawValue]=string&skipToken[context][defaultQuerySettings][enableExpand]=true&skipToken[context][defaultQuerySettings][enableSelect]=true&skipToken[context][defaultQuerySettings][enableCount]=true&skipToken[context][defaultQuerySettings][enableOrderBy]=true&skipToken[context][defaultQuerySettings][enableFilter]=true&skipToken[context][defaultQuerySettings][maxTop]=0&skipToken[context][defaultQuerySettings][enableSkipToken]=true&skipToken[context][model][entityContainer][schemaElementKind]=0&skipToken[context][elementType][typeKind]=0&skipToken[context][navigationSource][path][expressionKind]=0&skipToken[context][navigationSource][type][typeKind]=0&skipToken[context][elementClrType][memberType]=1&skipToken[context][elementClrType][assembly][entryPoint][declaringType]=string&skipToken[context][elementClrType][assembly][entryPoint][reflectedType]=string&skipToken[context][elementClrType][assembly][entryPoint][module][assembly]=string&skipToken[context][elementClrType][assembly][entryPoint][attributes]=0&skipToken[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&skipToken[context][elementClrType][assembly][entryPoint][callingConvention]=1&skipToken[context][elementClrType][assembly][entryPoint][memberType]=1&skipToken[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&skipToken[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&skipToken[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&skipToken[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&skipToken[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&skipToken[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&skipToken[context][elementClrType][assembly][entryPoint][returnType]=string&skipToken[context][elementClrType][assembly][manifestModule][assembly]=string&skipToken[context][elementClrType][assembly][securityRuleSet]=0&skipToken[context][elementClrType][module][assembly]=string&skipToken[context][elementClrType][declaringType]=string&skipToken[context][elementClrType][declaringMethod][memberType]=1&skipToken[context][elementClrType][declaringMethod][declaringType]=string&skipToken[context][elementClrType][declaringMethod][reflectedType]=string&skipToken[context][elementClrType][declaringMethod][module][assembly]=string&skipToken[context][elementClrType][declaringMethod][attributes]=0&skipToken[context][elementClrType][declaringMethod][methodImplementationFlags]=0&skipToken[context][elementClrType][declaringMethod][callingConvention]=1&skipToken[context][elementClrType][reflectedType]=string&skipToken[context][elementClrType][underlyingSystemType]=string&skipToken[context][elementClrType][genericParameterAttributes]=0&skipToken[context][elementClrType][attributes]=0&skipToken[context][elementClrType][structLayoutAttribute][value]=0&skipToken[context][elementClrType][typeInitializer][declaringType]=string&skipToken[context][elementClrType][typeInitializer][reflectedType]=string&skipToken[context][elementClrType][typeInitializer][module]=string&skipToken[context][elementClrType][typeInitializer][attributes]=0&skipToken[context][elementClrType][typeInitializer][methodImplementationFlags]=0&skipToken[context][elementClrType][typeInitializer][callingConvention]=1&skipToken[context][elementClrType][typeInitializer][memberType]=1&skipToken[context][elementClrType][baseType]=string&skipToken[context][path][edmType][typeKind]=0&skipToken[context][path][identifier]=string&top[context][defaultQuerySettings][enableExpand]=true&top[context][defaultQuerySettings][enableSelect]=true&top[context][defaultQuerySettings][enableCount]=true&top[context][defaultQuerySettings][enableOrderBy]=true&top[context][defaultQuerySettings][enableFilter]=true&top[context][defaultQuerySettings][maxTop]=0&top[context][defaultQuerySettings][enableSkipToken]=true&top[context][model][entityContainer][schemaElementKind]=0&top[context][elementType][typeKind]=0&top[context][navigationSource][path][expressionKind]=0&top[context][navigationSource][type][typeKind]=0&top[context][elementClrType][memberType]=1&top[context][elementClrType][assembly][entryPoint][declaringType]=string&top[context][elementClrType][assembly][entryPoint][reflectedType]=string&top[context][elementClrType][assembly][entryPoint][module][assembly]=string&top[context][elementClrType][assembly][entryPoint][attributes]=0&top[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&top[context][elementClrType][assembly][entryPoint][callingConvention]=1&top[context][elementClrType][assembly][entryPoint][memberType]=1&top[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&top[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&top[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&top[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&top[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&top[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&top[context][elementClrType][assembly][entryPoint][returnType]=string&top[context][elementClrType][assembly][manifestModule][assembly]=string&top[context][elementClrType][assembly][securityRuleSet]=0&top[context][elementClrType][module][assembly]=string&top[context][elementClrType][declaringType]=string&top[context][elementClrType][declaringMethod][memberType]=1&top[context][elementClrType][declaringMethod][declaringType]=string&top[context][elementClrType][declaringMethod][reflectedType]=string&top[context][elementClrType][declaringMethod][module][assembly]=string&top[context][elementClrType][declaringMethod][attributes]=0&top[context][elementClrType][declaringMethod][methodImplementationFlags]=0&top[context][elementClrType][declaringMethod][callingConvention]=1&top[context][elementClrType][reflectedType]=string&top[context][elementClrType][underlyingSystemType]=string&top[context][elementClrType][genericParameterAttributes]=0&top[context][elementClrType][attributes]=0&top[context][elementClrType][structLayoutAttribute][value]=0&top[context][elementClrType][typeInitializer][declaringType]=string&top[context][elementClrType][typeInitializer][reflectedType]=string&top[context][elementClrType][typeInitializer][module]=string&top[context][elementClrType][typeInitializer][attributes]=0&top[context][elementClrType][typeInitializer][methodImplementationFlags]=0&top[context][elementClrType][typeInitializer][callingConvention]=1&top[context][elementClrType][typeInitializer][memberType]=1&top[context][elementClrType][baseType]=string&top[context][path][edmType][typeKind]=0&top[context][path][identifier]=string&top[rawValue]=string&count[context][defaultQuerySettings][enableExpand]=true&count[context][defaultQuerySettings][enableSelect]=true&count[context][defaultQuerySettings][enableCount]=true&count[context][defaultQuerySettings][enableOrderBy]=true&count[context][defaultQuerySettings][enableFilter]=true&count[context][defaultQuerySettings][maxTop]=0&count[context][defaultQuerySettings][enableSkipToken]=true&count[context][model][entityContainer][schemaElementKind]=0&count[context][elementType][typeKind]=0&count[context][navigationSource][path][expressionKind]=0&count[context][navigationSource][type][typeKind]=0&count[context][elementClrType][memberType]=1&count[context][elementClrType][assembly][entryPoint][declaringType]=string&count[context][elementClrType][assembly][entryPoint][reflectedType]=string&count[context][elementClrType][assembly][entryPoint][module][assembly]=string&count[context][elementClrType][assembly][entryPoint][attributes]=0&count[context][elementClrType][assembly][entryPoint][methodImplementationFlags]=0&count[context][elementClrType][assembly][entryPoint][callingConvention]=1&count[context][elementClrType][assembly][entryPoint][memberType]=1&count[context][elementClrType][assembly][entryPoint][returnParameter][attributes]=0&count[context][elementClrType][assembly][entryPoint][returnParameter][member][memberType]=1&count[context][elementClrType][assembly][entryPoint][returnParameter][member][declaringType]=string&count[context][elementClrType][assembly][entryPoint][returnParameter][member][reflectedType]=string&count[context][elementClrType][assembly][entryPoint][returnParameter][member][module]=string&count[context][elementClrType][assembly][entryPoint][returnParameter][parameterType]=string&count[context][elementClrType][assembly][entryPoint][returnType]=string&count[context][elementClrType][assembly][manifestModule][assembly]=string&count[context][elementClrType][assembly][securityRuleSet]=0&count[context][elementClrType][module][assembly]=string&count[context][elementClrType][declaringType]=string&count[context][elementClrType][declaringMethod][memberType]=1&count[context][elementClrType][declaringMethod][declaringType]=string&count[context][elementClrType][declaringMethod][reflectedType]=string&count[context][elementClrType][declaringMethod][module][assembly]=string&count[context][elementClrType][declaringMethod][attributes]=0&count[context][elementClrType][declaringMethod][methodImplementationFlags]=0&count[context][elementClrType][declaringMethod][callingConvention]=1&count[context][elementClrType][reflectedType]=string&count[context][elementClrType][underlyingSystemType]=string&count[context][elementClrType][genericParameterAttributes]=0&count[context][elementClrType][attributes]=0&count[context][elementClrType][structLayoutAttribute][value]=0&count[context][elementClrType][typeInitializer][declaringType]=string&count[context][elementClrType][typeInitializer][reflectedType]=string&count[context][elementClrType][typeInitializer][module]=string&count[context][elementClrType][typeInitializer][attributes]=0&count[context][elementClrType][typeInitializer][methodImplementationFlags]=0&count[context][elementClrType][typeInitializer][callingConvention]=1&count[context][elementClrType][typeInitializer][memberType]=1&count[context][elementClrType][baseType]=string&count[context][path][edmType][typeKind]=0&count[context][path][identifier]=string&count[rawValue]=string&ifMatch[isWellFormed]=true&ifMatch[entityType][memberType]=1&ifMatch[entityType][assembly][entryPoint][declaringType]=string&ifMatch[entityType][assembly][entryPoint][reflectedType]=string&ifMatch[entityType][assembly][entryPoint][module][assembly]=string&ifMatch[entityType][assembly][entryPoint][attributes]=0&ifMatch[entityType][assembly][entryPoint][methodImplementationFlags]=0&ifMatch[entityType][assembly][entryPoint][callingConvention]=1&ifMatch[entityType][assembly][entryPoint][memberType]=1&ifMatch[entityType][assembly][entryPoint][returnParameter][attributes]=0&ifMatch[entityType][assembly][entryPoint][returnParameter][member][memberType]=1&ifMatch[entityType][assembly][entryPoint][returnParameter][member][declaringType]=string&ifMatch[entityType][assembly][entryPoint][returnParameter][member][reflectedType]=string&ifMatch[entityType][assembly][entryPoint][returnParameter][member][module]=string&ifMatch[entityType][assembly][entryPoint][returnParameter][parameterType]=string&ifMatch[entityType][assembly][entryPoint][returnType]=string&ifMatch[entityType][assembly][manifestModule][assembly]=string&ifMatch[entityType][assembly][securityRuleSet]=0&ifMatch[entityType][module][assembly]=string&ifMatch[entityType][declaringType]=string&ifMatch[entityType][declaringMethod][memberType]=1&ifMatch[entityType][declaringMethod][declaringType]=string&ifMatch[entityType][declaringMethod][reflectedType]=string&ifMatch[entityType][declaringMethod][module][assembly]=string&ifMatch[entityType][declaringMethod][attributes]=0&ifMatch[entityType][declaringMethod][methodImplementationFlags]=0&ifMatch[entityType][declaringMethod][callingConvention]=1&ifMatch[entityType][reflectedType]=string&ifMatch[entityType][underlyingSystemType]=string&ifMatch[entityType][genericParameterAttributes]=0&ifMatch[entityType][attributes]=0&ifMatch[entityType][structLayoutAttribute][value]=0&ifMatch[entityType][typeInitializer][declaringType]=string&ifMatch[entityType][typeInitializer][reflectedType]=string&ifMatch[entityType][typeInitializer][module]=string&ifMatch[entityType][typeInitializer][attributes]=0&ifMatch[entityType][typeInitializer][methodImplementationFlags]=0&ifMatch[entityType][typeInitializer][callingConvention]=1&ifMatch[entityType][typeInitializer][memberType]=1&ifMatch[entityType][baseType]=string&ifMatch[isAny]=true&ifMatch[isIfNoneMatch]=true&ifNoneMatch[isWellFormed]=true&ifNoneMatch[entityType][memberType]=1&ifNoneMatch[entityType][assembly][entryPoint][declaringType]=string&ifNoneMatch[entityType][assembly][entryPoint][reflectedType]=string&ifNoneMatch[entityType][assembly][entryPoint][module][assembly]=string&ifNoneMatch[entityType][assembly][entryPoint][attributes]=0&ifNoneMatch[entityType][assembly][entryPoint][methodImplementationFlags]=0&ifNoneMatch[entityType][assembly][entryPoint][callingConvention]=1&ifNoneMatch[entityType][assembly][entryPoint][memberType]=1&ifNoneMatch[entityType][assembly][entryPoint][returnParameter][attributes]=0&ifNoneMatch[entityType][assembly][entryPoint][returnParameter][member][memberType]=1&ifNoneMatch[entityType][assembly][entryPoint][returnParameter][member][declaringType]=string&ifNoneMatch[entityType][assembly][entryPoint][returnParameter][member][reflectedType]=string&ifNoneMatch[entityType][assembly][entryPoint][returnParameter][member][module]=string&ifNoneMatch[entityType][assembly][entryPoint][returnParameter][parameterType]=string&ifNoneMatch[entityType][assembly][entryPoint][returnType]=string&ifNoneMatch[entityType][assembly][manifestModule][assembly]=string&ifNoneMatch[entityType][assembly][securityRuleSet]=0&ifNoneMatch[entityType][module][assembly]=string&ifNoneMatch[entityType][declaringType]=string&ifNoneMatch[entityType][declaringMethod][memberType]=1&ifNoneMatch[entityType][declaringMethod][declaringType]=string&ifNoneMatch[entityType][declaringMethod][reflectedType]=string&ifNoneMatch[entityType][declaringMethod][module][assembly]=string&ifNoneMatch[entityType][declaringMethod][attributes]=0&ifNoneMatch[entityType][declaringMethod][methodImplementationFlags]=0&ifNoneMatch[entityType][declaringMethod][callingConvention]=1&ifNoneMatch[entityType][reflectedType]=string&ifNoneMatch[entityType][underlyingSystemType]=string&ifNoneMatch[entityType][genericParameterAttributes]=0&ifNoneMatch[entityType][attributes]=0&ifNoneMatch[entityType][structLayoutAttribute][value]=0&ifNoneMatch[entityType][typeInitializer][declaringType]=string&ifNoneMatch[entityType][typeInitializer][reflectedType]=string&ifNoneMatch[entityType][typeInitializer][module]=string&ifNoneMatch[entityType][typeInitializer][attributes]=0&ifNoneMatch[entityType][typeInitializer][methodImplementationFlags]=0&ifNoneMatch[entityType][typeInitializer][callingConvention]=1&ifNoneMatch[entityType][typeInitializer][memberType]=1&ifNoneMatch[entityType][baseType]=string&ifNoneMatch[isAny]=true&ifNoneMatch[isIfNoneMatch]=true' \ -H 'accept: /'

If you scroll down a bit in the Swagger UI after calling the method, you'll see what's going on:

image

Now, if you make the correct call directly, it works just fine:

http://localhost:64771/api/Accounts

image

I'll reiterate though: you _do not need to pass ODataQueryOptions<T> manually for the query to be applied to the database. ReturnIQueryable` and remove the query options parameter and it will work automatically.

HuntJason commented 1 year ago

There is no reason for you t

Two points: 1) You can use NSwagStudio to generate the client code for your API from the swagger endpoint, when you have that long "garbage URL", you cannot make the call properly, thus you end up having to hand-write every call to your API? This certainly not optimal if you are trying to write a client package for consuming client applications to use but, as noted, may be the only option (though it worked before... so....).

2) Regarding using the [EnableQuery] attribute and applying to the data context, how do you get access to the query options to then pass to your CQRS command handler? I have never seen a sample that shows how to address this using EnableQuery. That being said, it could be either my naivity or my misunderstanding of what's going on.

It has been my experience that the query on the database that, regardless if you are using CQRS or not, the query, as viewed in SQL Profiler, using EnableQuery ends up being "Select ", returning all records. The memory consumption of the service host thread goes up as all the records are brought back from the database, then the CPU usage goes up as the generated LINQ query is applied to the returned results. When using the ODataQueryOptions, the parameters are applied directly to the datacontext (queryOptions.ApplyTo()), resulting in a "SELECT WHERE" query where any filter options are then applied directly to the query.

Again, this might be me misunderstanding but it has been my experience.

julealgon commented 1 year ago

Two points:

  1. You can use NSwagStudio to generate the client code for your API from the swagger endpoint, when you have that long "garbage URL", you cannot make the call properly, thus you end up having to hand-write every call to your API? This certainly not optimal if you are trying to write a client package for consuming client applications to use but, as noted, may be the only option (though it worked before... so....).

To be clear, I'm in no way saying that what is happening there is correct or good. It is bad that OData doesn't properly integrate with Swashbuckle/OpenAPI and this is a fairly well-known gap at this point.

Now, one thing I'll say about OData, is that you should prefer using OData Connected Service to create a proxy client which relies on OData metadata, instead of relying on the OpenAPI document. You can find the official extension here:

It uses the standard "Connected Services" flow from Visual Studio to automatically generate a client-side proxy class that uses DataServiceContext class which you can query against using LINQ.

  1. Regarding using the [EnableQuery] attribute and applying to the data context, how do you get access to the query options to then pass to your CQRS command handler? I have never seen a sample that shows how to address this using EnableQuery. That being said, it could be either my naivity or my misunderstanding of what's going on.

As I said, it you do need to explicitly pass the values around into your own abstractions, then yes: using an explicit ODataQueryOptions object is the way to go. I was just saying that, usually, it is simpler to just return an IQueryable from your abstraction and let that be used by [EnableQuery] automatically. As long as you are not materializing the results upfront, it will still apply all the query options at the database level.

It has been my experience that the query on the database that, regardless if you are using CQRS or not, the query, as viewed in SQL Profiler, using EnableQuery ends up being "Select *", returning all records. The memory consumption of the service host thread goes up as all the records are brought back from the database, then the CPU usage goes up as the generated LINQ query is applied to the returned results.

That would be incorrect. [EnableQuery] will only work in-memory if you materialize the results before returning from the controller (say, you call .ToListAsync yourself, or return .AsEnumerable, etc). As long as you do not materialize the results, and expose them using the IQueryable interface, all query options will be directly translated to SQL and you will not get any memory or CPU utilization spikes due to in-memory processing.

When using the ODataQueryOptions, the parameters are applied directly to the datacontext (queryOptions.ApplyTo()), resulting in a "SELECT * WHERE" query where any filter options are then applied directly to the query.

[EnableQuery] also performs the same ApplyTo call when it detects an IQueryable return type, meaning the end-result is identical in that case.

HuntJason commented 1 year ago

Again, it might be me not knowing how to use the tool, but the tooling you recommended (ODataConnectedService), appears not to work properly in Visual Studio 2022. No client code is generated, even when it correctly accepts the https://localhost:5001/odata/$metadata endpoint. Does the same "gap" exist between the OData project and the ODataConnectedService project as between the OData project and the Swagger/OpenAPI project?

julealgon commented 1 year ago

Again, it might be me not knowing how to use the tool, but the tooling you recommended (ODataConnectedService), appears not to work properly in Visual Studio 2022. No client code is generated, even when it correctly accepts the https://localhost:5001/odata/$metadata endpoint.

I've used it in our project here for a real-world scenario in Visual Studio 2022 so I know it works (the extension was updated to work with VS2022 recently). You might want to send a bug report in the ODataConnectedService repo if you are experiencing problems.

Here is the repo for the tool:

Does the same "gap" exist between the OData project and the ODataConnectedService project as between the OData project and the Swagger/OpenAPI project?

Apologies but I don't quite get what you are asking here. The connected service project is handled by the same team that handles this library IIRC. I was not aware of any gaps with it until you mentioned the problem above.