使用Linq返回字典列表时出错

本文关键字:出错 列表 字典 Linq 返回 使用 | 更新日期: 2023-09-27 18:26:33

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

这是我得到的错误:"无法将类型"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;
            });
    }

使用Linq返回字典列表时出错

这不会返回Dictionary,而是返回IEnumerable:

from categories in temp
select categories.Value.Name

BTW"temp"answers"tempCategoriesList"是糟糕的变量名,它们绝对没有必要。使用ToDictionary()可以将这七行缩减为一行。

假设_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);