将列表字典转换为另一种类型的列表

时间:2014-02-04 17:22:52

标签: c# linq

我有一个类型字典:

Dictionary<Foo,List<Bar>> 

我想将其转换为此类型:

Dictionary<Foo,List<DTOBar>> 

我有一个名为'ToDTO'的方法,它接受一个类型Bar并返回'DTOBar'来进行转换

DTOBar ToDTO(Bar bar)
{
    return new DTOBar(bar);
}

我可以使用一个for循环转换它,然后使用类似的方法组转换Select():

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

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

是否可以进一步减少这种情况并在单个linq查询中执行此操作?我看过ToDictionary,但我不确定如何从列表中删除它。如果可能的话,我想避免修改ToDTO()函数(让它仍然只需要一个记录而不是List ..)

2 个答案:

答案 0 :(得分:3)

GetDict().ToDictionary(
    kvp => kvp.Key,
    kvp => kvp.Value.ConvertAll(DTOMapper.ToDTO)
);

答案 1 :(得分:1)

var ret = GetDict.ToDictionary(
              x => x.Key,
              x => x.Value.Select(DTOMapper.ToDTO).ToList());