我很新的OData(僅開始在網站上昨天),所以請原諒我,如果這個問題太愚蠢:-)如何使用字典或哈希表的LINQ查詢性能OData服務下
我有構建了一個測試項目作爲概念驗證,將我們當前的Web服務遷移到OData。對於這個測試項目,我使用反射提供程序通過OData公開POCO類。這些POCO類來自內存緩存。下面是迄今爲止代碼:
public class DataSource
{
public IQueryable<Category> CategoryList
{
get
{
List<Category> categoryList = GetCategoryListFromCache();
return categoryList.AsQueryable();
}
}
// below method is only required to allow navigation
// from Category to Product via OData urls
// eg: OData.svc/CategoryList(1)/ProductList(2) and so on
public IQueryable<Category> ProductList
{
get
{
return null;
}
}
}
[DataServiceKeyAttribute("CategoryId")]
public class Category
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public List<Product> ProductList { get; set; }
}
[DataServiceKeyAttribute("ProductId")]
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
}
據我所知,OData的是要使用LINQ幕後查詢這些內存中的對象,即:列出在這種情況下,如果有人瀏覽到的OData。 svc/CategoryList(1)/ ProductList(2)等等。
這裏雖然問題:在現實世界中的場景,我在看超過18萬條記錄,較24個不同的實體緩存中。
目前生產的網絡服務做出了很好的使用.NET字典和Hashtable的集合,以確保非常快看看UPS和避免循環的很多。因此,要獲得ProductID爲CategoryID爲CategoryID 1的產品,當前的Web服務只需執行2次查找,即:第一個查找類別,第二個查找類別內的產品。就像一棵樹。
我想知道我怎麼能遵循的OData類似的架構,我可以告訴的OData和LINQ使用字典或哈希表來定位記錄,而不是遍歷一個泛型列表?
是否有可能使用反射提供商或我留下,沒有別的選擇,只能寫我的OData的自定義提供?
在此先感謝。
太棒了......這個在你遇到過的真實世界中的任何例子?我到目前爲止在谷歌上找不到任何東西 – Raj
我不知道這個公開示例。看看這個http://blogs.msdn.com/b/vitek/archive/2010/02/25/data-services-expressions-part-1-intro.aspx。它本身描述了你可能遇到的表達樹。此外,Matt的博客系列中也有關於LINQ提供商的鏈接。 –