C# 将列表字典转换为其他类型的列表

C# 将列表字典转换为其他类型的列表,c#,linq,C#,Linq,我有一本类型的字典: Dictionary<Foo,List<Bar>> 我可以使用一个for循环,然后使用一个Select和一个方法组来转换它,如下所示: foreach (var kvp in GetDict()) { var lst = kvp.Value.Select(DTOMapper.ToDTO).ToList(); ret.Add(kvp.Key,lst); } 是否有可能进一步减少这种情况,并在单个linq查询中实现?我看过ToDi

我有一本类型的字典:

Dictionary<Foo,List<Bar>> 
我可以使用一个for循环,然后使用一个Select和一个方法组来转换它,如下所示:

foreach (var kvp in GetDict())
{
    var lst = kvp.Value.Select(DTOMapper.ToDTO).ToList();

    ret.Add(kvp.Key,lst);
}

是否有可能进一步减少这种情况,并在单个linq查询中实现?我看过ToDictionary,但我不知道如何从这一点上把它从列表中去掉。如果可能的话,我希望避免修改TOD函数,使其仍然只需要一条记录而不是一个列表。

听起来您已经具备了使其正常工作所需的一切,您只需要将其组合起来。您是否尝试过使用ToDictionary来执行此操作?您的实现有什么问题?当我调用ToDTO时,TodDictionary对我来说已经崩溃了,因为ToDTO只需要一个项目而不是一个列表。我现在明白我该怎么做了。谢谢您确实有代码获取一种类型的列表并将其转换为另一种类型。你的问题是对的:kvp.Value.SelectDTOMapper.ToDTO.ToListha!我被ReSharper宠坏了。我太依赖于它来写我的linq问题,然后让别人继续写,这样当它失败的时候,也帮不了你学习。它仍然让你无法解决非常简单的问题。如果你自己花时间写一些尝试、实验和学习,那么你就能在几秒钟内解决这样的问题。谢谢!我不知道“ConvertAll”方法。除了明显更具描述性和可读性之外,与Select相比,这里还有其他优势吗?表演,还是@dferraro:它可以分配正确大小的结果列表。列出Select的结果不知道源有多大
var ret = GetDict.ToDictionary(
              x => x.Key,
              x => x.Value.Select(DTOMapper.ToDTO).ToList());
foreach (var kvp in GetDict())
{
    var lst = kvp.Value.Select(DTOMapper.ToDTO).ToList();

    ret.Add(kvp.Key,lst);
}
var ret = GetDict.ToDictionary(
              x => x.Key,
              x => x.Value.Select(DTOMapper.ToDTO).ToList());
GetDict().ToDictionary(
    kvp => kvp.Key,
    kvp => kvp.Value.ConvertAll(DTOMapper.ToDTO)
);