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