public class Person
{
public string NickName{ get; set; }
public string Name{ get; set; }
}
var pl = new List<Person>;
var q = from p in pl
where p.Name.First() == 'A'
orderby p.NickName
select new KeyValuePair<String, String>(p.NickName, p.Name);
var d1 = q.ToList(); // Gives List<KeyValuePair<string, string>>
var d2 = q.ToDictionary(); // Does not compile
如何获取字典〈string,string〉?
6条答案
按热度按时间juud5qan1#
您需要指定
Dictionary
的值oalqel3c2#
一个字典不能包含多个相同的键,所以你应该确保(或知道)不是这种情况。你可以使用
GroupBy
来确保它:7fhtutme3#
编辑
如果你真的觉得你需要从
IEnumerable<KeyValuePair<TKey, TValue>>
到Dictionary
,你可以添加这个扩展。然后,您可以在任何
IEnumerable<KeyValuePair<TKey, TValue>>
上调用ToDictionary()
。编辑2
如果您预期重复,那么您也可以创建一个
ToLookup()
扩展。或者,如果您真的想要舍弃结果,可以加入
ToDictionary
的多载。如果您任意地丢弃除了“第一个”项之外的所有项(如果没有
OrderBy
,这意味着什么),您可以像下面这样使用此扩展,总的来说,您可以删除大部分代码,
如果存在重复项,do
但请注意,它返回一个
ILookup<TKey, TElement>
,其Item
索引器返回一个IEnumerable<TElement>
,因此您不会丢弃数据。628mspwn4#
请尝试以下操作,将NickName作为键,将Name作为值
但请注意,字典不允许重复,因此上面将对具有相同昵称重复记录引发错误也许您希望使用类似于字典但允许重复查找
7fyelxc55#
我知道这是用c#标记的,但昨天我只是试图弄清楚如何在vb.net中执行此操作,所以我想我也会分享一下在VB中如何执行此操作:
n53p2ov06#
您也可以透过转型从LINQ查询取得Dictionary:
这在Visual Studio 2013上有效。