2016-09-30 7 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を使用した後、クラスモデルへのマッピングを実現する方法です。

その他の回避策も歓迎します。ありがとう。データベース・テーブル・マッピング

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

そして、あなたはあなたがあなたのグループがあなたのモデルに(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; }  
} 

をしたいの投影を表すために、これらのクラスを表し、このクラスを考えると

+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を採用することを強くお勧めします。