2009-10-17 4 views
3

LINQ 문제가 있습니다. 나는 대안을 찾을 수있는 대안을 많이 볼 수 있지만 그 문제를 해결하려고 노력하고 싶다.이미 그룹화 된 데이터 구조에서 IGrouping을 만듭니다.

public enum AnimalType { 
    Cat, 
    Dog, 
    Rodent 
} 

var orderedAnimalTypes = new [] { AnimalType.Rodent, AnimalType.Cat }; 

나는 주어진 유형의 모든 동물을 돌려주는 함수 GetAnimals(AnimalType type)을 가지고 있습니다. orderedAnimalTypes을 가져다가 해당 유형의 모든 동물을 조회하여 그룹의 정렬 된 목록을 만들고 싶습니다.

IEnumerable<IGrouping<AnimalType, Animal>> 유형의 개체로 끝내고 싶습니다. Key의 유형이 AnimalType이고 그룹화의 열거 형이 Animal 인 그룹의 목록입니다.

그래서 내가하고 싶은 그룹의 IEnumerableorderedAnimalTypes 목록을 투사 한 후 (이입니다.

foreach (var group in groups) { 
    AnimalType animalType = group.Key; 
    IEnumerable<Animal> animals = group.ToArray(); 
} 

난 그냥 캔트 LINQ가 구축 어떤. 나는 내가해야 할 수 있습니다 생각하고이 작업을 수행하는 것 그것을 할 IGrouping의 내 자신의 구현을하지만 난 모르겠어요합니다.

에게 대안을

  • 나는 매우 수 사전으로 원했던 것을 쉽게 할 수는 있지만 주문하지는 않을 것입니다. 그 그룹화의 IEnumerable 얻으려고 왜.
  • 익명 형식을 사용할 수도 있지만 결과를 MVC 모델에 할당하려면 강력하게 형식화해야합니다 .. 원하는 형식은 IEnumerable<IGrouping<AnimalType, Animal>>이지만 그 형식을 가져 오는 방법을 알 수 없습니다. 난거야

답변

3
orderedAnimalTypes.SelectMany 
(
    animalType => GetAnimals(animalType), 
    (animalType, animal) => new { animalType, animal } 
) 
. 
GroupBy(item => item.animalType, item => item.animal); 
+0

지금 그것을 위해 당신의 말을해야한다는이 작동 ;-) 내가 9 개월 전 해주기 그룹에하려고했던 일을 기억하려고 노력! –

관련 문제