将List <MyObject>转换为Dictionary <obj.string,List <obj.ID >>

Mar*_*cus 26 .net c# linq

我想获取一个对象列表并将其转换为一个字典,其中键是对象中的一个字段,该值是对象上与键匹配的不同字段的列表.我现在可以通过循环执行此操作,但我觉得应该可以使用linq完成并且不必编写循环.我在想的组合GroupByToDictionary,但一直不成功至今.

这就是我现在正在做的事情:

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部分使用KeyIGrouping<string, int>作为字典密钥.IGrouping<string, int>实现IEnumerable<int>,因此我们可以将该样本集合转换Id为a List<int>,并调用ToList,这将成为Value给定的字典Key.