4

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

这就是我所拥有的,尽管我可能不接近:

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

感谢您的帮助。

4

3 回答 3

9

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

Session.Keys.Cast<string>()
            .Where(k => !k.Contains("Selected"))
            .ToList()
            .ForEach(k => Session[k] = null);
                          ^
于 2012-05-21T15:34:47.637 回答
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;
}
于 2012-05-21T15:37:04.593 回答
0

这是另一种功能更强大的解决方案:

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

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

于 2012-05-21T16:33:07.547 回答