来自这个清单
List<Foo> list = new List<Foo>()
{
new Foo("Albert", 49, 8),
new Foo("Barbara", 153, 45),
new Foo("Albert", -23, 55)
};
Run Code Online (Sandbox Code Playgroud)
我想找到一个字典,其中名称为键,Foo列表中的第一个对象具有给定名称作为值.
有没有办法使用LINQ以比我在这里所做的更简洁的方式编写逻辑?
Dictionary<string, Foo> fooByName = new Dictionary<string, Foo>();
foreach (var a in assignmentIndetifiers)
{
if (!names.ContainsKey(a.ValueText))
{
names.Add(a.ValueText, a);
}
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*tos 11
你可以尝试这样的事情:
var dictionary = list.GroupBy(f=>f.Name)
.Select(gr=>new { Name = gr.Key, Foo = gr.First() })
.ToDictionary(x=>x.Name, x=>x.Foo);
Run Code Online (Sandbox Code Playgroud)
我曾认为这Foo有一个名为属性Name,这是你要为你的字典的关键在于使用的.如果不是这样,你应该相应地改变它.
从本质上讲,我们将list基于此的项目分组Name,然后将结果投影到两个属性的匿名类型,Name并且Foo显然与您想要的dictinary的键/值相关联,然后我们调用该ToDictionary方法.
更新
正如伊戈尔正确指出的那样,你可以通过使用的整个投影Select并立即调用ToDictionary
var dictionary = list.GroupBy(f=>f.Name)
.ToDictionary(gr=>gr.Key, gr=>gr.First());
Run Code Online (Sandbox Code Playgroud)