ASP.NET是否支持使用内置缓存的多个缓存的概念?我的最终目标是能够从缓存中提取某种类型的所有项目。这可以通过每种类型的单独缓存或通过某种命名约定来完成。理想情况下,我可以通过以下方式使用LINQ:
var items =(from cache.Items item中的item.Key.StartsWith(“person”)select item);
或许我可以定义一个单独的“人”缓存。这可能与内置系统有关,还是需要使用第三方替代方案?
由于
答案 0 :(得分:3)
事实上,Cache
类已经implements IEnumerable
,因此您可以foreach
覆盖它(并使用LINQ查询)。文档没有说明这个枚举器产生的对象的类型是什么,但这可以在调试器中一次性地找到。
答案 1 :(得分:1)
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;
}
}
}