Wenn wir im Voraus verstehen, dass "nur weil eine Fähigkeit angeboten wird, macht es keine gute Idee" ...
Aus der Sicht der OData-konformen Signaturen müssen Sie zurückkehren IQueryable .
BEISPIEL:
Jedoch beschreiben viele Artikel in der jüngsten und nicht so jüngsten Vergangenheit IQueryable als:
Meine Frage ist :
Haben Sie das Gefühl, dass die Fähigkeiten von IQueryable und OData die obigen Probleme übertreffen?
Bei der Beantwortung würde ich erwarten, dass die Leute darüber sprechen:
... solche Sachen.
HINTERGRUND : Ich frage nicht nur wegen der oben aufgeführten Punkte. Aber auch, weil OData an uns als "Industriestandard" und nicht als Tool in Ihrer Toolbox verkauft wird. Die Implementierung würde also die Rendite für unsere WebAPI-Aufrufe (wo ich zurzeit arbeite) grundlegend ändern. Wir müssten von unserer eigenen IResult-Rücksignatur (die sehr nützlich ist) zu IQueryable wechseln, die Probleme zu haben scheint (aber auch nützlich sein kann).
IRESULT-BEISPIEL:
Zumindest würden sich unsere Rücksignaturen drastisch ändern. Und mir wurde gesagt, WebAPI-Aufruf, der OData implementiert, funktioniert nicht, indem "C Instance" in "IQueryable Instance" geändert wird (was sinnvoll ist).
Wenn Sie die OData-Abfrage mit der Web-API unterstützen, benötigen Sie kein IQueryable<T>
. Mit IQueryable<T>
können Sie schneller und mit weniger Code dorthin gelangen. IQueryable<T>
verfügt über die erforderlichen Abstraktionen, um eine eingehende OData-Abfrage in eine LINQ-Abfrage zu übersetzen. Das Framework definiert es bereits und es gibt eine reiche Unterstützung über verschiedene Backends wie Entityframework, NHibernate, Linq2Objects, RavenDB, Linq2OData usw. Also haben wir uns entschieden, reichhaltige Unterstützung für IQueryable<T>
mit Web-API zu haben. Vereinbart, IQueryable<T>
ist eine riesige Schnittstelle und macht viel mehr frei, als für die OData-Abfrage notwendig ist. Aber es ist etwas, das kostenlos ist :).
Das heißt, wir haben eine gute Unterstützung durch ODataQueryOptions<T>
für nicht-iQueryable-Fall. Schau dir meinen Blog-Eintrag dazu an hier
Außerdem verwechseln Sie die OData-Abfragesemantik mit OData. Rich-Query-Unterstützung ist nur ein Teil von OData. OData baut auf HTTP auf und hat verschiedene nützliche Funktionen wie
Tags und Links asp.net-web-api c# asp.net odata