我想获取一个对象列表并将其转换为一个字典,其中键是对象中的一个字段,该值是对象上与键匹配的不同字段的列表.我现在可以通过循环执行此操作,但我觉得应该可以使用linq完成并且不必编写循环.我在想的组合GroupBy和ToDictionary,但一直不成功至今.
这就是我现在正在做的事情:
var samplesWithSpecificResult = new Dictionary<string, List<int>>();
foreach(var sample in sampleList)
{
List<int> sampleIDs = null;
if (samplesWithSpecificResult.TryGetValue(sample.ResultString, out sampleIDs))
{
sampleIDs.Add(sample.ID);
continue;
}
sampleIDs = new List<int>();
sampleIDs.Add(sample.ID);
samplesWithSpecificResult.Add(sample.ResultString, sampleIDs);
}
Run Code Online (Sandbox Code Playgroud)
我能得到的最远的.GroupBy().ToDictionay()是 Dictionary<sample.ResultString, List<sample>>.
任何帮助,将不胜感激.
Jar*_*Par 44
请尝试以下方法
var dictionary = sampleList
.GroupBy(x => x.ResultString, x => x.ID)
.ToDictionary(x => x.Key, x => x.ToList());
Run Code Online (Sandbox Code Playgroud)
该GroupBy子句将Sample按其ResultString成员对列表中的每个实例进行分组,但它只保留Id每个样本的一部分.这意味着每个元素都是一个IGrouping<string, int>.
的ToDictionary部分使用Key的IGrouping<string, int>作为字典密钥.IGrouping<string, int>实现IEnumerable<int>,因此我们可以将该样本集合转换Id为a List<int>,并调用ToList,这将成为Value给定的字典Key.