簡體   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