2013-03-18 20 views
9

İlk olarak, ASP.NET WebApi öğreticilerini kullanarak temel bir ApiController that exposes an Entity Framework model through OData oluşturdum. Servis OData $ filtre sorguları için json döndürmek için çalışır. Ben çok değer mülkiyet OData $filter queries that include "any" or "all" queryies gerçekleştirdiğinizde

o İşte bir ODataException

atar ben

~/api/Blogs?$filter=any(Tags,Name+eq+'csharp')

My ApiController kullanmaya çalışıyorum OData sorgu var şuna benzer:

public class BlogController : ApiController 
{ 
    public BlogsController() 
    { 
     this.Entities = new BlogEntities(); 
    } 

    public ContactEntities Entities { get; set; } 

    [Queryable(PageSize = 25, AllowedQueryOptions = AllowedQueryOptions.All)] 
    public IQueryable<Blog> Get() 
    { 
     return this.Entities.Blogs; 
    } 
} 

Blog varlığı sözleşmesi var

public Blog { 
    public Guid ID { get; set; } 
    public string Title { get; set; } 
    public Tag Tags { get; set; } 
} 

public Tag { 
    public Guid ID { get; set; } 
    public string Name { get; set; } 
} 

istisna ben iyi çalışması gerekir benim kod ve her şeyi olağan dışı bir şey yok,

ODataException: Type 'Blog' does not have a property 'Name' 

Gördüğünüz gibi

atılmış. Microsoft ASP.NET Web API OData'da "herhangi bir" ve "tüm" sorguların henüz desteklenmemesi mümkün mü?

+0

' $ inlinecount 'oda seçenekleri göz ardı edilir. –

cevap

15

Herhangi bir gereksinimin biraz değişmesi gerekiyor. Böyle bir şey deneyin: Bu Etiketler üstleniyor

~/api/Blogs?$filter=Tags/any(tag: tag/Name eq 'csharp') 

aslında Etiketler koleksiyonu, yukarıdaki var gibi sadece tek bir Tag döndürür.

$ inlinecount yalnızca OData formatı için kutudan desteklenir. Bu konuyu burada yoğun yazdı:

Web API OData Inlinecount not working

soruyu kısaca şöyle kodu ile diğer formatlar için çalışan alabilirsiniz olmasıdır:

public PageResult<Customer> Get(ODataQueryOptions<Customer> queryOptions) 
{ 
    IQueryable results = queryOptions.ApplyTo(_customers.AsQueryable()); 
    return new PageResult<Customer>(results as IEnumerable<Customer>, Request.GetNextPageLink(), Request.GetInlineCount()); 
} 
kayda değer başka bir şey olmasıdır
+0

Teşekkürler, dostum! Önerinizi test ettikten sonra, OData şartnamesine baktım ... hadi önce bunu okumalıydım diyelim. –

+0

$ Inlinecount cevabı, "ApiController" devri bir servis için çalışmıyor –

+0

Sadece tekrar test ettim - çalışıyor. Lütfen kodunuzu ve kullandığınız URL’yi ekleyin. –