2009-09-27 6 views
8

ILookup 유형의 두 변수가 있습니다. Union 또는 Concat을 사용하여 값을 결합하고 그 결과를 같은 유형의 세 번째 변수에 지정하려고했습니다. Union과 Concat 모두 IGrouping을 반환합니다. IGrouping을 ILookup으로 바꾸려면 죽은 상태 여야합니다.하지만 그럴 수는 없습니다 !!! :-(IGrouping은 Key를 노출하므로 Lookup의 두 번째 매개 변수로 어려움을 겪고 있습니다. 어떤 도움도 많이 받으실 것입니다.LINQ IGrouping에서 Lookup으로 변환

답변

9

먼저 시퀀스를 병합하여 사용해야합니다. ToLookup :

두 대리자 얻어 SelectMany의 형태로 사용
var lookup = first.Concat(second) 
        .SelectMany(group => group, 
           (group, item) => new { Key = group.Key, 
                Item = item }) 
        .ToLookup(x => x.Key, x => x.Item); 

: 하나는 수집 원래 시퀀스에서 항목으로 변환하고, 또 원래의 컬렉션 내의 아이템 (즉, 그룹)를 취하도록하고을 반환 된 컬렉션의 항목 (즉, 해당 그룹의 키와 일치하는 항목)을 사용하여 결과 항목으로 이동합니다. 이것은 키가있는 항목의 시퀀스로 그룹화를 단순화하는 가장 간단한 방법입니다. .

위의 내용은 테스트되지 않았으므로 완전히 잘못되었을 수 있습니다. 비교적 비효율적이기도합니다 ... Lookup 인스턴스를 직접 구축 할 방법이 없다는 것은 부끄러운 일입니다. 물론 ILookup을 구현할 수 있습니다.