2016-09-30 5 views
1
+----+---------+--------+ 
| id | animal | type | 
+----+---------+--------+ 
| 0 | dog  | TypeA | 
| 1 | cat  | TypeA | 
| 2 | dog  | TypeB | 
| 3 | cat  | TypeB | 
+----+---------+--------+ 

분명 내가 어떤 어떻게 든이 같은 EF에서 GROUPBY을 사용하고 수행 할 작업을 새로운 상자의 클래스의 구조에 + 선택 :그룹으로

  • dbAnimal.GroupBy (X => x.animal);

그러나 데이터를 아래의 클래스 구조로 추가 매핑하려면 어떻게해야합니까? JSON 형식으로

public class Animal 
{ 
    public Animal() 
    { 
     this.animalType = new List<Type>(); 
    } 

    public string animalDesc { get; set; } 
    public List<Type> animalType { get; set; } 

    public class Type 
    { 
     public string typeDesc { get; set; } 
    } 
} 

예 :

[ 
    { 
     "animalDesc": "dog", 
     "animalType": 
     [ 
      { 
       "typeDesc": "TypeA", 
      }, 
      { 
       "typeDesc": "TypeB", 
      } 
     ] 
    }, 
    { 
     "animalDesc": "cat", 
     "animalType": 
     [ 
      { 
       "typeDesc": "TypeA", 
      }, 
      { 
       "typeDesc": "TypeB", 
      } 
     ] 
    } 
] 

내 질문은 EF에서 GROUPBY 사용 후 클래스 모델에 매핑을 달성하는 방법이다.

기타 해결 방법도 환영합니다. 감사. 모델로 그룹 (Select를 사용하는) 당신은 당신은 투사 할 수

public class Animal { 
    public Animal() { 
     animalType = new List<AnimalType>(); 
    } 

    public string animalDesc { get; set; } 
    public List<AnimalType> animalType { get; set; } 
} 

public class AnimalType { 
    public string typeDesc { get; set; }  
} 

을 수행 할 투사를 표현하기 위해 데이터베이스 테이블 매핑

public class DatabaseAnimal { 
    public int id { get; set; } 
    public string animal { get; set; } 
    public string type { get; set; } 
} 

그리고 이러한 클래스를 대표하는이 클래스 감안할 때

+0

가능한 복제 http://stackoverflow.com/questions/847066/group-by-multiple-columns – auburg

답변

3

var result = dbAnimal.GroupBy(a => a.animal) 
        .Select(grp => new Animal { 
         animalDesc = grp.Key, 
         animalType = grp.Select(e => new AnimalType { 
          typeDesc = e.type 
         }).ToList() 
         }); 

.NET Fiddle

또한 클래스의 명명 규칙으로 C# Capitalization Convention을 채택하는 것이 좋습니다.