2014-06-21 3 views
0

Я новичок в обоих OData и C#, и я не могу понять, как перевести URI запроса, как следующие:OData запрос в C#

http://services.odata.org/Northwind/Northwind.svc/Customers(10)/Orders $ расширяющих = 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 не имеет метод "Развернуть". Как я могу справиться с этими запросами, когда мне нужно расширить свойство навигации, связанное с определенным объектом?

+0

Добавьте [надлежащего использования личных данных] (HTTP: //msdn.microsoft.com/en-us/library/cc679728(v=vs.110).aspx): 'using System.Data.Services.Client;'. – CodeCaster

+0

Проблема заключается в том, что я могу фактически использовать метод Expand с клиентами: 'var orders = context.Customers.Expand (" Orders ")' верен, но это приводит к появлению этого запроса: 'http: // services. odata.org/Nortwind/Northwind.svc/Customers? $ expand = Заказы –

ответ

1

Прежде всего кода не может скомпилировать. x => c.Id == 10 неправ; также есть закрывающая скобка на вашем пропущенном пропуске. Во-вторых, для этого вам необходимо указать Заказы в переменной клиента.

Я использую эту услугу 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 

Выход:

enter image description here

Larger Image

// EDIT На основе приведенных ниже комментариев. Если вы не хотите идти на стол клиента и расширение заказов и 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(); 
+0

Спасибо. Извините за синтаксические ошибки, но я не вставлял свой код. С примером я только что написал, что это работает, но в моем случае не работает (Northwind был всего лишь аналогичным случаем). –

+0

Что делать, если я не хочу расширять клиента, но мне просто нужны детали заказа и заказа? С запросом, который вы написали, мы получаем информацию о деталях заказа и заказа в соответствии с данными клиента, а именно: 'http://services.odata.org/V3/Northwind/Northwind.svc/Customers('ALFKI ')/Заказы? $ Expand = Order_Details' мы получаем только «необходимую» информацию. –

+0

Я основывал свой пример как раз на вашем случае, потому что вы пошли так же, как клиент -> order -> orderdetail. Я только хотел продемонстрировать, как это работает. – Marco

2

Вам нужно будет запросить все дочерние свойства, необходимые вам как часть самого запроса OData.

попробовать следующие

context.Customers.Expand("Orders/Order_Details").Where(c => x => c.Id == 10).First(); 
foreach(var order in customer.Orders){ 
    //stuff 
} 
Смежные вопросы