转换ICollection .toDictionary()c#

时间:2014-12-02 09:28:59

标签: c# linq asp.net-mvc-4 dictionary

我在一个使用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>()

不幸的是,即使在查看官方文档后,我也无法理解如何使用此功能以更简洁的方式实现相同的目标。我该怎么办?

3 个答案:

答案 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);