2017-07-21 164 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 –