2013-03-01 32 views

Trả lời

9

Tôi đang sử dụng Microsoft WebAPI với các gói NuGet sau được cài đặt:

http://nuget.org/packages/Microsoft.Data.OData/

http://nuget.org/packages/microsoft.aspnet.webapi.odata

nào cho phép tôi viết những thứ như:

using System.Web.Http; 
using System.Web.Http.OData.Query; 

// Some stuff left out 

[Queryable] 
public IQueryable<Item> Get(ODataQueryOptions<Item> query) 
{   
    var items = query.ApplyTo(from item in context.Items select item); 
    return (IQueryable<Item>) items; 
} 

Sau đó, tôi có thể gọi nó bằng cách sử dụng jQuery Ajax (vì lợi ích của ví dụ, tôi thích sử dụng BackboneJS) như sau:

$.ajax({ url: '/api/items', data: $.param({ '$filter': 'ID eq 1' }) }); 

Sau đó, chỉ sau đó sẽ trả về các mục có ID bằng 1, mà tôi nghĩ bạn là gì sau?

Nếu ItemID là ID chính của đối tượng bạn đang lấy, tôi có lẽ sẽ theo nguyên tắc REST và tạo và API nơi url để lấy một mục với ID trong tổng số 1 sẽ là:

/api/items/1 

Và chỉ sử dụng các truy vấn oData trên tập hợp các mục nếu tôi đang truy vấn dựa trên các thuộc tính khác của các mục trong bộ sưu tập, hoặc làm một cái gì đó như dưới đây ví dụ khi truy xuất 10 bản ghi hàng đầu.

$.ajax({ url: '/api/items', data: $.param({ '$top': 10 }) }); 
+0

query.ApplyTo có vẻ như tôi đang tìm kiếm. Tôi cần nó trên mono. Cảm ơn bạn. –

1

Bạn có thể sử dụng sau NuGet gói để áp dụng bộ lọc: https://www.nuget.org/packages/Community.OData.Linq

mẫu mã sẽ là:

using System.Linq; 
using Community.OData.Linq; 

// dataSet in this example - any IQuerable<T> 
Sample[] filterResult = dataSet.OData().Filter("Id eq 2 or Name eq 'name3'").ToArray(); 

Hiện nay hỗ trợ: bộ lọc và orderby ở định dạng v4

Các vấn đề liên quan