我对LINQ还比较陌生,请谅解。我想要检查会话变量,如果变量名称不包含名为“Selected”的键,则将其值设置为null。
这是我的代码,但可能还有很大改进空间:
Session.Keys.Cast<string>().Where(k => !k.Contains("Selected")).ToList().ForEach(k => k = null);
感谢您的帮助。
Session.Keys.Cast<string>()
.Where(k => !k.Contains("Selected"))
.ToList()
.ForEach(k => Session[k] = null);
^
以下是完整的扩展LINQ表单。
Session.Keys
.Cast<string>()
.Where(k => !k.Contains("Selected")
.ToList()
.ForEach(k => Session[k] = null);
对于这种情况,我认为使用LINQ和foreach
的混合更易读:
foreach (var key in Session.Keys.Cast<string>().Where(k => !k.Contains("Selected").ToList())) {
Session[key] = null;
}
Session = Session.ToDictionary(it => it.Key,
it => (it.Key as string).Contains("Selected") ? it.Value : null);
这样做的折衷方案是它会创建一个新的字典。