使用LINQ循环遍历会话变量?

4

我对LINQ还比较陌生,请谅解。我想要检查会话变量,如果变量名称不包含名为“Selected”的键,则将其值设置为null。

这是我的代码,但可能还有很大改进空间:

Session.Keys.Cast<string>().Where(k => !k.Contains("Selected")).ToList().ForEach(k => k = null);

感谢您的帮助。
3个回答

9
您的LINQ设置了键值为null。我认为您需要实际设置值:
Session.Keys.Cast<string>()
            .Where(k => !k.Contains("Selected"))
            .ToList()
            .ForEach(k => Session[k] = null);
                          ^

3

以下是完整的扩展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;
}

鉴于Windows 8 Metro对.ForEach扩展的支持不足,我正在迅速放弃它,并回归传统的ForEach。 - Robaticus

0
这里有一个替代方案,更加功能强大:
Session = Session.ToDictionary(it => it.Key, 
              it => (it.Key as string).Contains("Selected") ? it.Value : null);

这样做的折衷方案是它会创建一个新的字典。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接