2011-02-03 72 views
7

有沒有不錯linqyFormCollection拆分爲Dictionary<string,string>的方法,該方法僅包含以特定字符串開頭的那些鍵?通過以特定字符串開頭的密鑰切片FormCollection

(這個問題是基本相同,這 - >但對於C#/的FormCollection的蟒蛇Slicing a dictionary by keys that start with a certain string代替)

這就是我想出了要解決的問題:

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

編輯:這個代碼的問題是,我必須爲不同的StartsWith字符串多次執行此操作,因此需要創建一個'實用程序'方法來執行上述操作。 這將是很好,如果它可以像一行寫着:

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

背景(沒有必要解決的問題):的背景是asp.net的MVC,並與動態辭典的一種形式領域。

這也是類似這樣的問題 - Return FormCollection items with Prefix - 但不完全一樣。

而且看了這個答案How to build C# object from a FormCollection with complex keys - 我開始懷疑我是否會被關閉,即使不使用表單提交,但發送JSON,而不是更好。

+0

有什麼不對你的代碼? – 2011-02-03 23:58:52

+0

請注意,您應該始終描述*問題*。這聽起來像你說:「我做的東西,這就是我正在做的。是否有這樣做的一個很好的方式嗎?」,尚不能告訴我們,爲什麼你目前的解決方案是*不是很好*。 – 2011-02-04 00:03:55

+0

謝謝,我編輯的問題,說爲什麼不是很好(這個詞「編輯」,所以它看起來並不像你抱怨什麼) – PandaWood 2011-02-04 00:13:50

回答

14

如果你正在尋找採取現有的字典,生產具有鍵+值的副本,新的字典,對於按鍵的子集的「好」的方式,一些LINQ代碼將很好地做到這一點:

var appSettings = formCollection.AllKeys 
    .Where(k => k.StartsWith("AppSettings.")) 
    .ToDictionary(k => k, k => formCollection[k]); 
-6
[HttpPost] 
public ActionResult Index(FormCollection collection) 
{ 
    Dictionary<string,object> form = new Dictionary<string, object>(); 
    collection.CopyTo(form); 
    return View(); 
} 
相關問題