2016-12-02 28 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,Name。來自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

我認爲你必須先對數據進行分組,然後重新組織下面的數據。

類,如下面

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; } 
} 

邏輯看起來像

//添加數據

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); 

重新安排你的需要格式

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