使用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;
});
}
这不会返回Dictionary,而是返回IEnumerable:
from categories in temp
select categories.Value.Name
BTW"temp"answers"tempCategoriesList"是糟糕的变量名,它们绝对没有必要。使用ToDictionary()可以将这七行缩减为一行。
假设_iDataService.Categories
是Category
的集合,并且您想要Category
的名称词典,那么我认为这就是您想要的。
tempCategoriesList = categories.ToDictionary(c=>c.Name);
你可以把它减少到一行
return _iDataService.Categories.ToDictionary(c=>c.Name);
另一方面,如果_iDataService.Categories
是Dictionary<string,Category>
,并且您基本上想用Name
替换当前密钥,那么我认为这就是您想要的。
return _iDataService.Categories.ToDictionary(kvp=>kvp.Value.Name, kvp.Value);