4

ですから、私はまだLINQに慣れていないので、我慢してください。セッション変数をチェックしようとしていますが、変数名に「Selected」という名前のキーが含まれていない場合は、その値をnullに設定します。

これは私が持っているものですが、おそらく私は近くにいません:

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

助けてくれてありがとう。

4

3 に答える 3

9

あなたが持っているLINQはキーをnullに設定しています。これが実際に値を設定するために必要なものだと思います。

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 に答える