我必須使用ASP .NET MVC提供的的WebAPI 4. 我知道其中的WebAPI自動工作在頂部層處理的OData查詢Web服務取得(如$filter
,$top
,$skip
),但如果我想自己處理過濾,該怎麼辦?ASP .NET MVC 4的WebAPI:手工處理的OData查詢
I don't simply return data from my database,但我有另一個層,它增加了一些屬性,進行一些轉換等。所以查詢我的所有數據,轉換它們並將它們返回到WebAPI類進行OData過濾不僅夠好。這當然非常緩慢,通常是一個糟糕的主意。
那麼有沒有辦法讓從我的WebAPI入口點傳播OData查詢參數到我調用的函數來獲取和轉換數據?
例如,GET來/api/people?$skip=10&$top=10
會調用服務器上的:
public IQueryable<Person> get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
而且在PersonService
:
public IQueryable<Person> getPeople(var ODataQueries) {
IQueryable<ServerSidePerson> serverPeople = from p in dbContext.ServerSidePerson select p;
// Make the OData queries
// Skip
serverPeople = serverPeople.Skip(ODataQueries.Skip);
// Take
serverPeople = serverPeople.Take(ODataQueries.Take);
// And so on
// ...
// Then, convert them
IQueryable<Person> people = Converter.convertPersonList(serverPeople);
return people;
}
這是最完整/正確的答案,非常感謝,我將在我的下一個項目中使用它。 – frapontillo
看看https://github.com/Roysvork/LinqToQuerystring/,這可以讓您選擇直接從原始odata查詢字符串創建IQueryable <>。 –
謝謝,這表明我朝着正確的方向前進。 –