2017-07-21 162 views
-1

我有一本字典變量聲明RegionGridvalues詞典和LINQ:過濾詞典列表

json = Convert.ToString(modal.RegionGrid); 
Dictionary<string, object> RegionGridvalues = serializer.Deserialize<Dictionary<string, object>>(json); 

我有很多喜歡R1_T11,R1_T12等鍵的默認值zero.Some具有非Initeger像串,布爾等 一些值是非零也像4136,3122等

enter image description here

我希望有一個字典過濾具有只有非零值在裏面。 我認爲Linq是最好的方式。但我對Linq很陌生。任何人都可以幫助我從這本詞典中獲得非零值。

+2

爲什麼字典「<字符串,對象>」而不是「字典」? –

+0

我想我不明白你的問題。你爲什麼使用Dictionary <>來解析Json?如果你堅持不使用NewtonSoft,我認爲使用Dynamics來過濾你想要的會更容易。 – EasyE

+0

這裏沒有問題,或者你只是希望有人會爲你做所有的辛苦工作? – Liam

回答

0

的代碼示例引出的整數是否被存儲爲對象的問題。它會永遠是一個整數嗎?如果是的話,我會建議:

 var RegionGridvalues = serializer.Deserialize<Dictionary<string, object>>(json) //deserialize json 
             .Where(kvp => (int)kvp.Value != 0)    //eliminate entries with 0 value 
             .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); //convert results back into dictionary 

where步驟具有一定的靈活性,具體取決於數據。另一種選擇是轉換爲字符串並與「0」比較(例如(kvp.Value?.ToString() ?? 0) != 0);這將防止錯誤,如果它沒有被存儲爲一個整數。請注意空合併以保護空值。

+0

非常感謝Daniel .. –

0

你真的需要用Newtonsoft或類似的東西來做到這一點,但如果你不能,那麼下面的代碼可以用來過濾Zero值。

TRY -

var results = RegionGridvalues.Where(k => k.Value.ToString() != "0"); 
+0

非常感謝Janus –