对字典<字符串、字典<字符串、int>> 进行 linq 查询时出现问题

本文关键字:字符串 字典 问题 linq int 进行 查询 | 更新日期: 2023-09-27 18:35:05

考虑以下几点。

Dictionary<string, Dictionary<string, int>> myData;

我只想保留内部int > 1的外部条目。

myData= myData.Select(c => c.Value.Where(i => i.Value > 1));

。引发转换错误。

谢谢。

编辑

@Saeed给出的答案是做得很好,但是我现在需要一些额外的东西。 我需要外部词典仅包含内部词典具有 1 个以上条目的条目。 (每次我认为我已经拥有它时,我都没有。 我相信我应该看到它!

对字典<字符串、字典<字符串、int>> 进行 linq 查询时出现问题

没有int大于 1 的外部字典,因为每个外部字典"包含"与其内部字典中一样多的整数。

如果要保留至少一个int大于 1 的外部字典:

myData.Select(d => d.Value.Any(p => p.Value > 1));

如果要保留所有int都大于 1 的外部字典:

myData.Select(d => d.Value.All(p => p.Value > 1));

你应该把它投射到字典中,你也可以简单地使用匿名类型而不是它的确切类型。

myData= myData
             .Select(c => new {Key = c.Key,
                           Value = c.Value
                           .Where(i => i.Value > 1)
                           .ToDictionary(y=>y.Key, y=>y.Value)})
             .ToDictionary(x=>x.Key, x=>x.Value);

更新:完成此操作后,对于您的其他要求,请执行以下操作:

myData = myData.Where(x=>x.Value.Count() > 1).ToDictionary(x=>x.Key,x=>x.Value);

如果您在浏览字典时遇到问题,也许要做的是摆脱它们!

var flattened = 
  from kvp1 in myData
  let s1 = kvp1.Key
  from kvp2 in kvp1.Value
  let s2 = kvp2.Key
  let i = kvp2.Value
  select new { s1, s2, i };

现在有一个不错的平面集合,您应该可以轻松过滤到您想要的内容。