转换ICollection.toDictionary()c#

转换ICollection.toDictionary()c#,c#,linq,asp.net-mvc-4,dictionary,C#,Linq,Asp.net Mvc 4,Dictionary,我在一个使用MVC4和EntityFramework的项目中 在我的C#代码中,我通过返回一个包的简单查询访问数据库。现在一个包有一个项目列表,我需要一个带有这些项目Id和名称的字典。我使用此代码实现以下功能: Package pkg = (from aPkg in DB.Packages where aPkg.PackageId == id select aPkg).First(); Dictionary<int, string> materials = new Dic

我在一个使用MVC4和EntityFramework的项目中

在我的C#代码中,我通过返回一个包的简单查询访问数据库。现在一个包有一个项目列表,我需要一个带有这些项目Id和名称的字典。我使用此代码实现以下功能:

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);
}
Package pkg=(来自DB.Packages中的aPkg,其中aPkg.PackageId==id
选择aPkg).First();
字典材料=新字典();
foreach(包装材料中的材料垫){
材料。添加(材料材料、材料标签);
}
然而,这相当冗长,我注意到我可以使用另一个函数:
pkg.Materials.toDictionary()

不幸的是,即使在查看了官方文档之后,我也无法理解如何使用此函数以不太冗长的方式实现相同的目标。如何执行此操作?

根据,必须提供两个
Func
对象,以返回将用于字典元素的键和值的值

var materials = pkg.Materials.ToDictionary(x => x.MaterialId, x => x.Label);
仍然要注意MaterialId是唯一的,否则ToDictionary扩展方法(和您的代码)将崩溃。

根据,您必须提供两个
Func
对象,以返回将用于字典元素的键和值的值

var materials = pkg.Materials.ToDictionary(x => x.MaterialId, x => x.Label);
仍然要注意MaterialId是唯一的,否则ToDictionary扩展方法(和您的代码)将崩溃。

这应该可以做到:

var dictionary = pkg.Materials.ToDictionary(id => id.MaterialId, l => l.Label);
这应该做到:

var dictionary = pkg.Materials.ToDictionary(id => id.MaterialId, l => l.Label);

尝试以以下方式使用ToDictionary方法:

pkg.Materials.ToDictionary(x => x.MaterialId, x => x.Label);

尝试以以下方式使用ToDictionary方法:

pkg.Materials.ToDictionary(x => x.MaterialId, x => x.Label);