2014-12-02 2 views
0

저는 C#에 익숙하지 않으며 EntityFramework에서 MVC4를 사용하는 프로젝트에 있습니다.Transfrom ICollection .toDictionary() 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>()합니다.

불행히도 공식 문서를 확인한 후에도이 기능을 사용하여 덜 장황한 방식으로 동일한 목표를 달성하는 방법을 이해할 수 없습니다. 내가 어떻게 해?

답변

2

msdn에 따르면 사전 요소의 키와 값에 사용될 값을 반환하려면 두 개의 Func<TSource, TResult> 개체를 제공해야합니다.

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

MaterialId가 고유하다는 점에 유의하십시오. 그렇지 않으면 ToDictionary 확장 방법 (및 코드)이 충돌합니다.

1

이 그것을 수행해야합니다

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

시도를 이런 식으로 방법을 ToDictionary 사용 :

pkg.Materials.ToDictionary(x => x.MaterialId, x => x.Label); 
관련 문제