使用Linq返回Dictionary列表时出错

时间:2014-10-15 14:49:44

标签: c# dictionary

所以我有一个返回类别的方法,但它们列在Disctionary列表中,它在select语句中给出了转换错误。这是我第一次使用Dictionary。我错过了什么?

这是我得到的错误: “无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.Dictionary'。存在显式转换(您是否错过了演员?)”

 private Task<Dictionary<String, Category>> getCategoriesList()
    {
        return Task.Factory.StartNew<Dictionary<String, Category>>(() =>
            {
                var temp = _iDataService.Categories;
                var tempCategoriesList = new Dictionary<String, Category>();

                tempCategoriesList = (from categories in temp
                                      select categories.Value.Name);

                return tempCategoriesList;
            });
    }

2 个答案:

答案 0 :(得分:0)

这不会返回字典,它returns an IEnumerable

from categories in temp
select categories.Value.Name

BTW“temp”和“tempCategoriesList”是可怕的变量名,它们绝对没必要。使用ToDictionary()这七行可以简化为一行。

答案 1 :(得分:0)

假设_iDataService.CategoriesCategory的集合,并且您想要一个名称字典Category,那么我认为这就是您想要的。

tempCategoriesList = categories.ToDictionary(c=>c.Name);

你可以将其减少到一行

return _iDataService.Categories.ToDictionary(c=>c.Name);

另一方面,如果_iDataService.CategoriesDictionary<string,Category>并且您基本上想要用Name替换当前密钥,那么我认为这就是您想要的。

return _iDataService.Categories.ToDictionary(kvp=>kvp.Value.Name, kvp.Value);