[linq] 사전 객체로 LINQ 그룹화

에서 LINQ를 사용하여를 만들려고 Dictionary<string, List<CustomObject>>합니다 List<CustomObject>. “var”을 사용하여이 작업을 수행 할 수 있지만 익명 형식을 사용하고 싶지 않습니다. 여기 내가 가진 것입니다

var x = (from CustomObject o in ListOfCustomObjects
      group o by o.PropertyName into t
      select t.ToList());

또한 Cast<>()일단 LINQ 라이브러리에서 사용하려고 시도했지만 x유효하지 않은 캐스트의 결과로 컴파일 문제가 발생합니다.



답변

Dictionary<string, List<CustomObject>> myDictionary = ListOfCustomObjects
    .GroupBy(o => o.PropertyName)
    .ToDictionary(g => g.Key, g => g.ToList());


답변

@Michael Blackburn에 대해서는 언급 할 수 없지만 GroupBy가 필요하지 않기 때문에 downvote를 얻은 것 같습니다.

다음과 같이 사용하십시오.

var lookupOfCustomObjects = listOfCustomObjects.ToLookup(o=>o.PropertyName);
var listWithAllCustomObjectsWithPropertyName = lookupOfCustomObjects[propertyName]

또한 GroupBy (). ToDictionary ()를 사용할 때보 다 성능이 우수하다는 것을 알았습니다.


답변

@ atari2600의 경우 람다 구문에서 ToLookup을 사용하는 방법은 다음과 같습니다.

var x = listOfCustomObjects
    .GroupBy(o => o.PropertyName)
    .ToLookup(customObject => customObject);

기본적으로 IGrouping을 가져와 PropertyName 값을 키로 사용하여 목록 사전으로 구체화합니다.


답변

다음은 나를 위해 일했습니다.

var temp = ctx.Set<DbTable>()
  .GroupBy(g => new { g.id })
  .ToDictionary(d => d.Key.id);


답변