2016-12-02 4 views
-1

У меня есть список данных. Например.Linq grouping из категории в подкатегорию

| 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 становится -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); 

Re Устройте Ваш требуется формат

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 loop необходим. Я подумал, что, возможно, это можно сделать с помощью нескольких элементов linq или группы. Пустая запись должна быть вставлена, когда обнаружена новая группа. – user696383

Смежные вопросы