Вырезание формы с помощью ключей, начинающихся с определенной строки

Есть ли хороший способ расщепления FormCollection в Dictionary который содержит только те ключи, которые начинаются с определенной строки?

(Этот вопрос в основном такой же, как this->, но для C # / FormCollection вместо python. Нарезка словаря ключами, начинающимися с определенной строки )

Вот что я придумал, чтобы решить проблему:

 public ActionResult Save(FormCollection formCollection) { var appSettings = new Dictionary(); var appKeys = formCollection.AllKeys.Where(k => k.StartsWith("AppSettings.")); foreach (var key in appKeys) { appSettings[key] = formCollection[key]; } ... 

Изменить: проблема с этим кодом заключается в том, что я должен делать это несколько раз для разных строк StartsWith, и поэтому для этого нужно создать метод «utility». Было бы неплохо, если бы он мог читать в одной строке:

 formCollection.Where(k=>k.Key.StartsWith("AppSettings."); 

Фон (не обязательно для решения проблемы): контекст – это asp.net mvc и форма с динамическим словарем полей.

Это также похоже на этот вопрос – элементы Return FormCollection с префиксом – но не совсем то же самое.

И прочитав этот ответ Как построить объект C # из FormCollection со сложными ключами – я начал задаваться вопросом, лучше ли мне даже не использовать сообщение формы, а вместо этого отправлять JSON.

Если вы ищете «хороший» способ использовать существующий словарь, создавая новый словарь с копиями ключей + значения, для подмножества ключей, некоторый код LINQ будет делать это красиво:

 var appSettings = formCollection.AllKeys .Where(k => k.StartsWith("AppSettings.")) .ToDictionary(k => k, k => formCollection[k]); 
 [HttpPost] public ActionResult Index(FormCollection collection) { Dictionary form = new Dictionary(); collection.CopyTo(form); return View(); }