繁体   English   中英

C#中的oData查询

[英]oData query in c#

我对odata和c#还是陌生的,无法弄清楚如何翻译URI查询,如下所示:

http://services.odata.org/Northwind/Northwind.svc/Customers(10)/Orders?$ expand = Order_Details

在C#中,使用linq方法语法。

我这样尝试:

var customer = context.Customers.Where( x => x.Id == 10 ).First();

foreach(var order in customer.Orders.Expand("Order_Details")){
    //stuff
}

但是customer.Orders没有“扩展”方法。 在必须扩展连接到特定实体的导航属性的情况下,如何处理这些查询?

作为OData查询本身的一部分,您将需要请求所有需要的子属性。

尝试跟随

context.Customers.Expand("Orders/Order_Details").Where(c => x => c.Id == 10 ).First();
foreach(var order in customer.Orders){
    //stuff
}

首先,您的代码无法编译。 x => c.Id == 10是错误的; 在您的foreach缺少项上也有一个结束语。 其次,您需要在客户变量中包括Orders来执行此操作。

我正在使用Northwind v3服务来对此进行演示( http://services.odata.org/V3/Northwind/Northwind.svc/ )以及LinqPad(www.linqpad.net)

var customer = Customers.Expand("Orders/Order_Details")
                        .Where(cus => cus.CustomerID == "ALFKI");

foreach (var element in customer)
{
    element.Orders.Dump();
}

这将导致如下URL调用:

http://services.odata.org/V3/Northwind/Northwind.svc/Customers('ALFKI')?$expand=Orders/Order_Details

输出:

在此处输入图片说明

大图

//编辑基于以下注释。 如果您不想遍历客户表并展开订单AND order_details,则也可以这样做:

var orders = Orders.Expand("Order_Details")
                   .Where(o => o.CustomerID == "ALFKI").Dump();

要么

var orders = Orders.Expand(ex => ex.Order_Details)
                   .Where(o => o.CustomerID == "ALFKI").Dump();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM