【问题标题】:Linq grouping from Category to subcategory从类别到子类别的 Linq 分组
【发布时间】:2016-12-02 04:59:59
【问题描述】:

我有数据列表。例如。

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

有可能吗?

【问题讨论】:

  • 为什么第一组有5个?
  • @Rob 对不起,我的错误。我已经更正了谢谢。

标签: c# asp.net-mvc linq c#-4.0


【解决方案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 
        }

【讨论】:

  • 不错。似乎需要 foreach 循环。我想也许可以通过多个选择 linq 或组来完成。检测到新组时插入空白记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2020-11-20
相关资源
最近更新 更多