And*_*air 100 .net c# linq .net-3.5
我在列表中有以下对象:
public class DemoClass
{
public int GroupKey { get; set; }
public string DemoString { get; set; }
public object SomeOtherProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,我想创建以下字典:
Dictionary<int, List<DemoClass>>
Run Code Online (Sandbox Code Playgroud)
我想List<DemoClass>按照属性进行分组GroupKey,但我不明白这是如何完成的以及一些帮助.
在思考了一下后,我实现了所需的行为:
var groupedDemoClasses = from demoClass in mySepcialVariableWhichIsAListOfDemoClass
group demoClass by demoClass.GroupKey
into groupedDemoClass
select groupedDemoClass;
var neededDictionary = groupedDemoClass.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法把它变成一个单一的陈述?
Jon*_*eet 188
只是为了使mquander的建议具体化:
var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
.GroupBy(x => x.GroupKey)
.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
Run Code Online (Sandbox Code Playgroud)
如果你使用更短的变量名称,你会缩短它,当然:)
但是,我可以建议查找可能更合适吗?查找基本上是从键到字典的字典IEnumerable<T>- 除非您确实需要将值作为列表,否则使用ToLookup调用使代码更短(并且更有效):
var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
.ToLookup(x => x.GroupKey);
Run Code Online (Sandbox Code Playgroud)
Pra*_*dda 84
var groupedDemoClasses = (from demoClass in mySepcialVariableWhichIsAListOfDemoClass
group demoClass by demoClass.GroupKey
into groupedDemoClass
select groupedDemoClass).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
Run Code Online (Sandbox Code Playgroud)
这个会工作!!!