查询键值对列表

时间:2015-12-23 10:34:01

标签: c# key-value

我创建了一个键值对列表,并且正在运行查询以查找id是否在列表中多次出现。 id保存在“Value”部分。我使用以下代码,但不知道如何获得键值对的“值”。见行尾:

var result = tableIds
     .GroupBy(v => v.Value)
     .Where(c => c.Count() > 1)
     .Select(x=> new KeyValuePair<string, string>(x.Key, ));

注意:tableIds看起来像这样:

var tableIds = new List<KeyValuePair<string, string>>();

我基本上想要找到“值”中的ID不止一次出现的位置。如果是,我需要存储密钥和值以供以后使用。如果id出现在具有不同键的几个地方,我需要捕获所有这些。

2 个答案:

答案 0 :(得分:1)

除了您对值进行分组而不是对键进行分组之外,还有其他错误:您期望单个值,而分组结果具有多个值。如果不加入它们,您将无法返回KeyValuePair<string, string>的可枚举数。

如果您只想拥有任何价值,请使用First()

 .Select(x=> new KeyValuePair<string, string>(x.Key, x.First().Key));

请注意,lambda中的x.Key实际上是v.Value。因此,Key令人困惑的双重使用是故意的。如果您打算将密钥分组,请使用:

var result = tableIds
     .GroupBy(v => v.Key)
     .Where(c => c.Count() > 1)
     .Select(x=> new KeyValuePair<string, string>(x.Key, x.First().Value));

答案 1 :(得分:1)

试试这个

tableIds.GroupBy(v => v.Key).Where(c => c.Count() > 1).SelectMany(c=> c).ToList()

它返回tableId中具有相同Key的其他KV的每个KV对。