2

我想发送这样的请求:

/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);

但问题是所有页面仍将通过网络发送

4

3 回答 3

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;
}
于 2012-05-07T10:58:47.123 回答
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)"));
于 2012-05-07T12:01:33.353 回答
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();
于 2012-05-07T14:15:30.647 回答