2013-10-22 108 views
0

我有一個API,返回序列化爲JSON的c#對象。Linq2Rest不適用於嵌套屬性?

我需要在我的API網址上實現某種OData格式解析。 也就是說例如,原來是這樣的: http://api.loc/userprofiles/all/?$orderby=ProfileProperties.Email

我一直在尋找一些或多或少直截了當庫,讓我來分析過濾器/排序依據(OData的)查詢字符串,並在我的數據源應用篩選。我發現Linq2Rest它很簡單格式,其中我可以用它喜歡:

var filtered = allItems.Filter(Request.Params).OfType<Content.UserProfile>(); 

問題是,我Content.UserProfile有一個嵌套屬性.ProfileProperties,其中包含我感興趣的

屬性

因此,例如:

var user = new Content.UserProfile(); 
user.ProfileProperties.Email = "[email protected]"; 
user.ProfileProperties.FirstName = "Fukoka"; 

..等

不幸Linq2Rest無法解析我的查詢和失敗,提示信息 「ProfileProperties.Email不被識別爲一個有效的財產」 ..

我怎樣才能然後對嵌套屬性的項目該過濾器?

回答

1

查詢網址是生成的,還是您自己編寫的?我本來期望它是:

http://api.loc/userprofiles/all/?$orderby=ProfileProperties/Email 

通常與OData的嵌套屬性使用作爲分隔符斜槓(/)。

否則,您應該包含有關查詢URL如何生成的一些信息。

+0

非常感謝!它現在似乎在工作。唷:)是最初的URL是我寫的(我正在測試新的東西..)..現在,這一步似乎解決了,我的下一個問題將是 - 我應該如何在客戶端上生成這些URL?你能指導我嗎? :) – Denis

+0

Linq2Rest也有一個客戶端部分。看看這個教程:http://reimers.dk/tutorials/using-linq2rest-as-a-client – jjrdk

+0

謝謝!我找到了這個頁面,但我一直在努力尋找IRestClient的實現;如果我不需要任何客戶端和反序列化,該怎麼辦?我只需要Linq2Rest在Linq表達式中創建適當的查詢字符串(在URL中)(甚至應用於'dummy'屬性 - Provider.Query) – Denis

1

您可以使用Microsoft提供的 OData Client Library

是否有任何具體的原因,你不使用它?從Query Options

//採取

實施例定義的訂單查詢具有大於30 //和由船舶日期排序,下降一個貨運值。

DataServiceQuery<Order> selectedOrders = context.Orders 
    .AddQueryOption("$filter", "Freight gt 30") 
    .AddQueryOption("$orderby", "OrderID desc");