LINQ查询返回一个Dictionary<string, string>。

248

我有一个MyClass的集合,希望使用LINQ查询来获取不同的值,并返回一个Dictionary<string, string>作为结果,但我无法想出比下面更简单的方法。 有什么更简洁的代码可以用来获取Dictionary<string, string>作为我的结果吗?

var desiredResults = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

var queryResults = (from MyClass mc in myClassCollection
                    orderby bp.SomePropToSortOn
                    select new KeyValuePair<string, string>(mc.KeyProp, mc.ValueProp)).Distinct();

foreach (var item in queryResults)
{
    desiredResults.Add(item.Key.ToString(), item.Value.ToString());
}

7
你希望处理重复键时采取什么措施?只需使用第一个并忽略后续的吗?请注意,字典是无序的,因此查询中的排序不会产生任何影响... - Jon Skeet
1
也许你要找的是IDictionary的SortedDictionary实现。否则,在字典上进行排序是没有意义的。 - Fede
2个回答

399

直接使用ToDictionary方法。

var result = 
  // as Jon Skeet pointed out, OrderBy is useless here, I just leave it 
  // show how to use OrderBy in a LINQ query
  myClassCollection.OrderBy(mc => mc.SomePropToSortOn)
                   .ToDictionary(mc => mc.KeyProp.ToString(), 
                                 mc => mc.ValueProp.ToString(), 
                                 StringComparer.OrdinalIgnoreCase);

1
Mehrdad,感谢你的指引。这正是我想要的方向,只是可能一直忽略了ToDictionary的正确重载形式。 - Scott Ivey

16

看看 ToLookup 和/或 ToDictionary 扩展方法。


请注意,这些扩展方法可以帮助将集合转换为字典或查找表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接