2

我想給這樣的要求:OData的Web服務從VS服務quering參考

/odata.svc/Pages(ItemId=27,PublicationId=1) 

下面是我使用的代碼:

CdService.ContentDeliveryService cdService = new ContentDeliveryService(new Uri("http://xxx.xx:81/odata.svc")); 
var pages = cdService.Pages; 
pages = pages.AddQueryOption("ItemId", "270"); 
pages = pages.AddQueryOption("PublicationId", "2"); 
var result = pages.Execute(); 

我的問題是,這個代碼發送類似的請求這個:

/odata.svc/Pages()?ItemId=270&PublicationId=2 

這個請求的問題是,它返回我所有的頁面,而不僅僅是我需要一個。

我可以使用LINQ:

result.Single(page => page.ItemId == 27 && page.PublicationId == 1); 

但問題是,所有的網頁將仍然通過電線發送

回答

1

我做了一個快速測試與LINQ和它似乎是在做正確的查詢:

ContentDeliveryService.ContentDeliveryService service = 
    new ContentDeliveryService.ContentDeliveryService(new Uri("http://localhost:99/odata.svc")); 
var page = from x in service.Pages 
      where x.ItemId == 2122 
        && x.PublicationId == 16 
      select x; 
foreach (var page1 in page) 
{ 
    Console.WriteLine(page1.Title); 
} 
Console.Read(); 
+0

Thansk,我更喜歡這樣的語法:'cdService1.Pages.Where(P => p.ItemId == 27 && p.PublicationId == 1).First();' –

+0

:)正如我所說,這是一個「快速測試」 –

1

你可以試試這個:

EntityDescriptor entityDescriptor = service.Entities.Where(c => 
       c.Entity is CDService.Page 
       && ((CDService.Page)c.Entity).ItemId == pageId.ItemId 
       && ((CDService.Page)c.Entity).PublicationId == pageId.PublicationId) 
      .FirstOrDefault(); 

if (entityDescriptor != null) 
{ 
    return (CDService.Page)entityDescriptor.Entity; 
} 
1

我發現一個解決方案,雖然不是很好:

ContentDeliveryService cdService1 
       = new ContentDeliveryService(new Uri("http://xxx.xx:81/odata.svc")); 
var page = cdService1.Execute<Page>(
      new Uri("http://xxx.xx:81/odata.svc/Pages(ItemId=27,PublicationId=1)"));