2016-12-02 12 views
-1

私はデータのリストを持っています。例えば。カテゴリからサブカテゴリまでのLinqグループ

| Id | Name | GroupId | GroupName | 
|----|------|---------|-----------| 
| 1 | nm1 | 1  | Group1 | 
| 2 | nm2 | 1  | Group1 | 
| 3 | nm3 | 1  | Group1 | 
| 4 | nm4 | 2  | Group2 | 
| 5 | nm5 | 2  | Group2 | 

{ id = 1, Name = "nm1", GroupId = 1, GroupName = "Group1" } 
{ id = 2, Name = "nm2", GroupId = 1, GroupName = "Group1" } 

私は結果リストにID、名前のみを持たせたいと思います。 GroupIdのIdは-1になります。 Id -1の空の値も必要です。 (空白)

| Id | Name  | 
|----|-----------| 
| -1 | Group1 | 
| 1 | nm1  |  
| 2 | nm2  | 
| 3 | nm3  |   
| -1 | blank  | 
| -1 | Group2 | 
| 4 | nm4  | 
| 5 | nm5  | 

可能ですか?

+0

なぜ最初のグループに5が含まれていますか? – Rob

+0

@Rob申し訳ありませんが、私の間違いです。私は感謝を訂正しました。 – user696383

答えて

1

まずデータをグループ化し、以下のようにデータを再構成する必要があると思います。ロジックは、データ

List<GroupData> dataList = new List<GroupData>(); 

     dataList.Add(new GroupData() {Id = 1, Name = "nm1", GroupId = 1, GroupName = "Group1"}); 
     dataList.Add(new GroupData() { Id = 2, Name = "nm2", GroupId = 1, GroupName = "Group1" }); 
     dataList.Add(new GroupData() { Id = 3, Name = "nm3", GroupId = 1, GroupName = "Group1" }); 
     dataList.Add(new GroupData() { Id = 4, Name = "nm4", GroupId = 2, GroupName = "Group2" }); 
     dataList.Add(new GroupData() { Id = 5, Name = "nm5", GroupId = 2, GroupName = "Group2" }); 

//グループのデータが

 var result = 
     (from data in dataList 
      group data by data.GroupName 
      into newGroup 
      orderby newGroup.Key 
      select newGroup); 

再あなたの必要にアレンジを加える

//のように見えます

public class GroupData 
{ 
    public int Id { get; set; } 
    public String Name { get; set; } 
    public int GroupId { get; set; } 
    public String GroupName { get; set; } 
} 

public class Result 
{ 
    public int Id { get; set; } 
    public String Name { get; set; } 
} 
下回るような

クラスフォーマット

var items=new List<Result>(); 
     foreach (var item in result) 
     { 
      items.Add(new Result {Id=-1, Name=item.Key}); 
      items.AddRange(item.ToList().Select(subItem => new Result {Id = subItem.Id, Name = subItem.Name})); 
      //You can add your blank record here. but not sure exact logic 
     } 
+0

ニース。 foreachループが必要と思われる。私はそれが複数の選択linqまたはグループで行うことができたかもしれないと思った。ブランクレコードは、新しいグループが検出されたときに挿入されます。 – user696383

関連する問題