[英]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.