2012-05-16 9 views
7

tengo una expresión LINQ y quiero convertirlo en una cadena de consulta para el descanso, es decir¿Existe una biblioteca de LINQ para descansar para C#

public IQueryable<Organisation> Organisations; 

... 
var organisations = Organisations.Where(x => x.Name == "Bob"); 

convierte

http://restservice.com/Organisations?$filter=Name eq "Bob" 

Respuesta

7

lo hice finalmente encontrar uno en Linq2Rest (también a NuGet) que parece ajustarse a la ley. No es compatible con OAuth, pero sería posible incorporarlo.

2

Si usted es el control de el origen de datos, es OData lo que estás buscando.

Un google-buscado trajo HttpEntityClient, aunque no tengo ninguna experiencia con él pero parece útil.

supongo que también podría escribir su propia implementación, porque francamente, REST-apis no tienen que seguir un cierto estándar cuando se trata de filtrar, ordenar, etc ...

0

tratar Odata

El Open Data Protocol (OData) es un protocolo web para consultar y actualizar datos que proporciona una forma de desbloquear sus datos y liberarlos de los silos existentes en las aplicaciones actuales. OData hace esto aplicando y construyendo sobre tecnologías web como HTTP, Atom Publishing Protocol (AtomPub) y JSON para proporcionar acceso a la información desde una variedad de aplicaciones, servicios y tiendas. El protocolo surgió de las experiencias de implementación de clientes y servidores de AtomPub en una variedad de productos en los últimos años. OData se está utilizando para exponer y acceder a información de una variedad de fuentes, incluidas, entre otras, bases de datos relacionales, sistemas de archivos, sistemas de gestión de contenido y sitios web tradicionales.

EDIT 1: echar un vistazo a aquí también: http://paulhammant.com/2012/02/13/client-side-mvc-frameworks-compared/

2

PocoHttp puede hacer exactamente lo que usted desea. Además, puede hacer la llamada al servicio y deserializar entidades para usted.

También puede modificar fácilmente su ODataProvider para apoyar las funciones nativas OData adicionales (longitud, startsWith, etc.)

2

versiones preliminares tempranas de la Biblioteca OData tenían un analizador de cadena de consulta, pero la construcción de expresión nunca fue totalmente implementado, y la característica fue luego eliminada. Es un agujero importante en la biblioteca, ya que sin él, te queda carga útil y solo soporte de encabezado.

Afortunadamente Linq2Rest hace exactamente lo que necesita, con una línea de código:

var organisations = Organisations.sources.Filter(Request.Params).OfType<Organisations>() 

El reparto es necesario debido a una cadena de consulta puede seleccionar en contra de la colección, la producción de una colección diferente de tipos. Si solo estás predicando sobre propiedades, entonces no te importa eso.

1

Encontré que DataServiceContext desarrollado por Microsoft funciona mucho mejor que las bibliotecas de terceros de Linq2Rest y HttpEntityClient mencionadas aquí. La documentación también es mucho mejor. El inconveniente es que DataServiceContext funciona solo con XML (sin JSON). Pero tanto los servicios REST de WebAPI OData como los Servicios de datos de WCF pueden devolver XML, si un cliente lo solicita en el encabezado HTTP.Debido a que el soporte XML no requiere un trabajo de desarrollo adicional, la falta de soporte JSON es poco probable que sea un problema.

Hay ejemplos de LINQ to REST usando DataServiceContext: http://msdn.microsoft.com/en-us/library/windowsazure/dd894039.aspx

Cuestiones relacionadas