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

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 に答える
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

これを試すことができます:

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 に答える