【问题标题】:Dictionary and Linq : filter the dictionary listDictionary and Linq : 过滤字典列表
【发布时间】:2017-07-21 13:05:47
【问题描述】:

我声明了一个字典变量RegionGridvalues

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

我有很多键,例如 R1_T11 、 R1_T12 等,默认值为零。有些键具有非 Initeger,例如字符串、Bool 等。 有些值不为零,如 4136,3122 等。

我想要一个过滤后的字典,其中只有非零值。 我认为 Linq 是最好的获取方式。但我是 Linq 的新手。谁能帮我从这本字典中获取非零值。

【问题讨论】:

  • 为什么字典是&lt;string, object&gt;而不是Dictionary&lt;string, int&gt;
  • 我想我不明白你的问题。为什么要使用 Dictionary 来解析 Json?如果您坚持不使用 NewtonSoft,我认为使用 Dynamics 过滤出您想要的内容会更容易。
  • 这里没有问题,或者您只是希望有人会为您完成所有艰苦的工作?
  • 我还将传递一些其他数据类型
  • 我不知道语法。 Tats y 我问过这个问题利亚姆

标签: c# linq dictionary


【解决方案1】:

代码示例提出了整数是否被存储为对象的问题。它总是一个整数吗?如果是这样,我会推荐:

        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);如果它不存储为整数,这将防止错误。注意空值合并以防止空值。

【讨论】:

    【解决方案2】:

    您确实需要使用 Newtonsoft 或类似的工具来执行此操作,但如果您不能,那么以下方法可以过滤掉零值。

    试试 -

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

    【讨论】:

    • 非常感谢 Janus
    猜你喜欢
    • 2016-06-27
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多