我在一个使用MVC4和EntityFramework的项目中。
在我的C#代码中,我使用返回包的简单查询来访问数据库。现在一个包有一个项目列表,我需要一个包含这些项目的Id和Name的字典。我使用以下代码实现了以下功能:
Package pkg = (from aPkg in DB.Packages where aPkg.PackageId == id
select aPkg).First();
Dictionary<int, string> materials = new Dictionary<int,string>();
foreach(Material mat in pkg.Materials){
materials.Add(mat.MaterialId, mat.Label);
}
然而,这非常冗长,我注意到我可以使用另一个功能:pkg.Materials.toDictionary<tKey, tElement>()
。
不幸的是,即使在查看官方文档后,我也无法理解如何使用此功能以更简洁的方式实现相同的目标。我该怎么办?
答案 0 :(得分:2)
根据msdn,您必须提供两个Func<TSource, TResult>
个对象,以返回将用于字典元素的键和值的值。
var materials = pkg.Materials.ToDictionary(x => x.MaterialId, x => x.Label);
还要注意MaterialId是唯一的,否则ToDictionary扩展方法(和你的代码)会崩溃。
答案 1 :(得分:1)
这应该这样做:
var dictionary = pkg.Materials.ToDictionary(id => id.MaterialId, l => l.Label);
答案 2 :(得分:1)
尝试以这种方式使用ToDictionary方法:
pkg.Materials.ToDictionary(x => x.MaterialId, x => x.Label);