ASP.NET是否支持使用內置緩存的多個緩存的概念?我的最終目標是能夠從緩存中提取某種類型的所有項目。這可以通過每種類型的單獨緩存或通過某種命名約定來完成。理想情況下,我可以通過以下方式使用LINQ:ASP.NET獨立緩存?
var items =(from item in cache.Items where item.Key.StartsWith(「person」)select item);
或者我可以定義一個單獨的「人」緩存。這是可能的內置系統或我需要使用第三方替代?
感謝
ASP.NET是否支持使用內置緩存的多個緩存的概念?我的最終目標是能夠從緩存中提取某種類型的所有項目。這可以通過每種類型的單獨緩存或通過某種命名約定來完成。理想情況下,我可以通過以下方式使用LINQ:ASP.NET獨立緩存?
var items =(from item in cache.Items where item.Key.StartsWith(「person」)select item);
或者我可以定義一個單獨的「人」緩存。這是可能的內置系統或我需要使用第三方替代?
感謝
事實上,Cache
類已經implementsIEnumerable
,這樣你就可以foreach
在它(與LINQ查詢它,對於這個問題)。文檔沒有說明這個枚舉器產生什麼類型的對象,但是這可以在調試器中一次又一次找到。
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Cache.Insert("nord", new Person("Nord"));
Cache.Insert("bert", new Person("Bert"));
Cache.Insert("frog", new Animal("Kermit"));
foreach (Person p in Cache.CacheOfType<Person>())
{
Response.Write(p.Name); //prints NordBert
}
Response.Write("<br>");
foreach (Animal a in Cache.CacheOfType<Animal>())
{
Response.Write(a.Name); //prints Kermit
}
}
}
public static class CacheExt
{
public static IEnumerable<T> CacheOfType<T>(this System.Web.Caching.Cache cache) where T : class
{
foreach (System.Collections.DictionaryEntry i in cache)
{
if (i.Value as T != null) yield return (T)i.Value;
}
}
}
緩存實際上並沒有Items集合。即使這樣做,這也無濟於事,因爲它只會返回DictionaryEntry的類型。 – 2009-10-08 15:48:13
我意識到它支持IEnumerable,但我認爲它只是返回值的無類型對象。實際上,它返回一個具有鍵和值的DictionaryEntry對象的枚舉。所以我現在可以這樣做: var people =(from entry entry in cache where entry.Key.StartsWith(「person」)select entry.Value); – 2009-10-08 15:02:36