[c#] LINQ-값을 목록으로 사용하여 목록을 사전으로 변환

나는

List<MyObject> 

데이터베이스에서 검색합니다. 그러나 그룹화 목적으로 MyObject의 속성으로 키를 지정하고 싶습니다. LINQ에서 내 목록을 다음으로 캐스팅하는 가장 좋은 방법은 무엇입니까?

Dictionary<long, List<MyObject>>

다음이 있습니다.

myObjectList.ToDictionary(x => x.KeyedProperty)

그러나 다음을 반환합니다.

Dictionary<long, MyObject>



답변

당신이 그룹에 원하는 것 같은데 MyObject하여 인스턴스 KeyedProperty와로 그룹화 것을 넣어 Dictionary<long,List<MyObject>>. 그렇다면 다음을 시도하십시오.

List<MyObject> list = ...;
var map = list
  .GroupBy(x => x.KeyedProperty)
  .ToDictionary(x => x.Key, x => x.ToList());


답변

다음 과 같이 클래스 에서 ToLookup확장 메서드 를 사용해야합니다 .Enumerable

List<MyObject> list = ...;

ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty);

사전에 배치하려면 다음 과 같이 ToDictionary확장 메서드를 사용할 수 있습니다 .

IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
    l => l.Key);


답변