使用LINQ循环访问会话变量?

时间:2012-05-21 15:31:09

标签: linq session

所以我还是LINQ的新手,所以请耐心等待。我正在尝试检查会话变量,如果变量名称不包含名为“Selected”的键,则将其值设置为null。

这就是我所拥有的,虽然我可能并不接近:

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

您拥有的LINQ将密钥设置为null。我相信这是您实际设置值所需要的:

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

这是另一种更具功能性的解决方案:

Session = Session.ToDictionary(it => it.Key, 
              it => (it.Key as string).Contains("Selected") ? it.Value : null);

权衡是它创建了一个新词典。