查询键值对列表

Querying a list of key value pair

我已经创建了一个键值对列表,并且是一个 运行 查询来查找某个 ID 是否在列表中出现多次。 id 保存在 "Value" 部分。我正在使用以下代码,但不确定如何获取键值对的 "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>>();

我基本上是想找到 "value" 中的 id 出现不止一次的地方。如果是这样,我需要存储键和值以备后用。如果 id 出现在多个地方,并且使用不同的密钥,我将需要捕获所有这些。

除了按值而不是键分组之外,还有其他问题:您期望单个值,而分组结果有多个值。不加入他们,你就无法 return 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));

试试这个

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

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