c# - 如何为 Odata 创建按 Id 获取的查询表达式

标签 c# odata wcf-rest wcf-web-api

我已经创建了一个 OData 服务,现在我正尝试在客户端使用该服务。我想在 c# 查询表达式中创建一个表达式,例如下面的 url-

http://odata.org/Product-Service/Product(150)

上面的 url 在浏览器中工作正常,但我想在 C# 中为上面的 url 创建查询表达式。任何帮助将不胜感激。

最佳答案

您可以在 System.Data.Services.Client 中使用 DataServiceContext + DataServiceQuery 来访问 Url。请记住,由于延迟加载,在调用 First() 之前不会执行任何查询。

var context = new DataServiceContext(new Uri("http://odata.org/Product-Service"), DataServiceProtocolVersion.V3);
var query = context.CreateQuery<Product>("Product");
Product product = query.Where(p => p.Id == 150).First();

以上内容应解析为 http://odata.org/Product-Service/Product(150)您可以通过查看 query.Entities 集合来检查。集合中的每个实体都将包含一个 Uri。

此外,如果您的产品类包含导航属性,您将需要添加扩展查询选项:

var query = context.CreateQuery<Product>("Product").
   AddQueryOption("$expand", "NavigationProperty");

关于c# - 如何为 Odata 创建按 Id 获取的查询表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493451/

相关文章:

c# - 用 c++ 或 c# 玩游戏?

c# - 什么是 OpenGL (OpenTK) 中顶点表示的 C# 结构的大小?

odata - 使用 WebApi 和 ODataQueryOptions 实现 $select

wcf - WCF REST 错误中的 SOAP header

rest - WCF RESTFul 服务中的异常处理

android - 如何让用户一次只能从一台设备登录

c# - 绑定(bind)到 ObservableCollection<string>

C# - 通过串行端口从设备获取所有数据并检测控制字符(ACK、SOH、...)

azure - 使用 Azure 逻辑应用从 Salesforce 获取记录

odata - 如何在详情页面绑定(bind)实体对象