Transform ICollection .toDictionary() c#

本文关键字:toDictionary ICollection Transform | 更新日期: 2023-09-27 18:32:42

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

但是这很冗长,我注意到我可以使用另一个功能: pkg.Materials.toDictionary<tKey, tElement>() .

不幸的是,即使在检查了官方文档之后,我也无法理解如何使用此功能以不那么冗长的方式实现相同的目标。我该怎么做?

Transform ICollection .toDictionary() c#

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

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

仍然要注意MaterialId是唯一的,否则ToDictionary扩展方法(和你的代码)将崩溃。

这应该可以做到:

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

尝试以这种方式使用 ToDictionary 方法:

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