是否有适用于 C# 的 Linq to REST 库

本文关键字:to REST Linq 适用于 是否 | 更新日期: 2023-09-27 18:34:14

我有一个Linq表达式,我想将其转换为REST的查询字符串,即

public IQueryable<Organisation> Organisations;
...
var organisations = Organisations.Where(x => x.Name == "Bob");

成为

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

是否有适用于 C# 的 Linq to REST 库

我最终在 Linq2Rest(也是一个 NuGet)中找到了一个似乎符合要求的。 不支持 OAuth,但可以构建它。

如果您控制数据源,则您正在寻找的就是 OData。

谷歌搜索带来了HttpEntityClient,虽然我没有任何经验,但它看起来很有用。

我想你也可以编写自己的实现,因为坦率地说,rest-apis 在过滤、排序等方面不必遵循一定的标准......

PocoHttp可以做你想做的事。此外,它可以调用服务并为您反序列化实体。

您还可以轻松修改其 ODataProvider 以支持其他 OData 本机函数(长度、开头为等)。

OData 库的早期预发布版本具有查询字符串分析器,但表达式生成从未完全实现,然后删除了该功能。这是库中的主要漏洞,因为没有它,您只剩下有效负载和一些标头支持。

幸运的是,Linq2Rest 只需一行代码即可满足您的需求:

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

强制转换是必需的,因为查询字符串可以针对集合进行选择,从而生成不同的类型集合。如果你只基于属性,那么你就不在乎这个。

我发现Microsoft开发的DataServiceContext比这里提到的Linq2Rest和HttpEntityClient第三方库工作得更流畅。文档也好得多。缺点是DataServiceContext仅适用于XML(没有JSON)。但是,如果 HTTP 标头中的客户端请求 XML,则 WebAPI OData REST 服务和 WCF 数据服务都可以返回 XML。由于 XML 支持不需要额外的开发工作,因此缺少 JSON 支持不太可能成为问题。

有使用 DataServiceContext 的 LINQ to REST 示例: http://msdn.microsoft.com/en-us/library/windowsazure/dd894039.aspx

试试Odata

开放数据协议 (OData) 是一种用于查询和更新数据的 Web 协议,它提供了一种解锁数据并将其从当今应用程序中存在的孤岛中解放出来的方法。OData 通过应用和构建 HTTP、Atom 发布协议 (AtomPub) 和 JSON 等 Web 技术来提供对来自各种应用程序、服务和存储的信息的访问。该协议源于过去几年在各种产品中实现AtomPub客户端和服务器的经验。 OData 用于公开和访问来自各种来源的信息,包括但不限于关系数据库、文件系统、内容管理系统和传统网站。

编辑 1:也看看这里:http://paulhammant.com/2012/02/13/client-side-mvc-frameworks-compared/