lee*_*n3o 4 c# linq asp.net caching
我需要从缓存中清除包含密钥中特定字符串的项目.我已经从以下开始,并认为我可以做一个linq查询
var enumerator = HttpContext.Current.Cache.GetEnumerator();
Run Code Online (Sandbox Code Playgroud)
但我不能?我希望做类似的事情
var enumerator = HttpContext.Current.Cache.GetEnumerator().Key.Contains("subcat");
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一目标的任何想法?
Eam*_*nne 10
由Cache
生成DictionaryEntry
对象创建的枚举器.此外,a Cache
可能只有string
键.
因此,您可以编写以下内容:
var httpCache = HttpContext.Current.Cache;
var toRemove = httpCache.Cast<DictionaryEntry>()
.Select(de=>(string)de.Key)
.Where(key=>key.Contains("subcat"))
.ToArray(); //use .ToArray() to avoid concurrent modification issues.
foreach(var keyToRemove in toRemove)
httpCache.Remove(keyToRemove);
Run Code Online (Sandbox Code Playgroud)
但是,当缓存很大时,这是一个可能很慢的操作:缓存不是设计为像这样使用.您应该问自己,替代设计是否可行且不可取.为什么需要一次删除多个缓存键,为什么不按子串对缓存键进行分组?
由于Cache是IEnumerable,因此您可以自由地应用所需的所有LINQ方法.您唯一需要的是将其强制转换为IEnumerable <DictionaryEntry>:
var keysQuery = HttpContext.Current.Cache
.Cast<DictionaryEntry>()
.Select(entry => (string)entry.Key)
.Where(key => key.Contains("subcat"));
现在keysQuery是从"subcat"开始的所有键的非严格集合.但是如果你需要从缓存中删除这些条目,最简单的方法就是使用foreach语句.
归档时间: |
|
查看次数: |
2497 次 |
最近记录: |