按列对表的行进行分组

本文关键字: | 更新日期: 2023-09-27 18:37:22

我有这个表:

Id  Title   BugNumber
--- ------- ---------
1    row1      224
2    row2      321
3    row3      224
4    row4      123

我想按 BugNumber 对行进行分组,并在视图中显示它们,如下所示:

Bug 224
--------
   1 row1
   3 row3
Bug 321
-------
   2 row2
Bug 123
-------
   4 row4

型:

public class MyTable
{
    public Guid Id {get; set;}
    public string Title {get; set;}
    public int? BugNumber {get; set;}
}

控制器:

public IActionResult MyGroupView()
{
    using(DbContext db = new DbContext())
    {
        db.MyTable.GroupBy(r => r.BugNumber);
        // ??? 
    }
}

按列对表的行进行分组

是的,你必须使用 GroupBy .这是如何使用两个类和一个选择查询执行此操作的示例。

public class MyTable
{
    public int? Id {get;set;}
    public string Title {get;set;}
    public int? BugNumber {get;set;}
    public override string ToString()
    {
        return String.Format(" {0}, {1}, {2}", Id, Title, BugNumber.Value);
    }
}
public class MyTableGroup
{
    public int? BugNumber {get;set;}
    public List<MyTable> Values{get;set;}
}
var data = new List<MyTable>()
{
    new MyTable() { Id = 1, Title = "row1", BugNumber=224 },
    new MyTable() { Id = 2, Title = "row2", BugNumber=321 },
    new MyTable() { Id = 3, Title = "row3", BugNumber=224 },
    new MyTable() { Id = 4, Title = "row4", BugNumber=123 }
};
var result = new List<MyTableGroup>();
var groupResult = data.GroupBy(s => s.BugNumber);
 foreach (var group in groupResult)
 {
     result.Add(new MyTableGroup()
     {
         BugNumber = group.Key,
         Values = group.ToList()
     });
 }
//display result for console app:
result.ForEach(r => Console.WriteLine("'n key: {0}'n, Values: 'n't {1}'n", r.BugNumber, string.Join(", 'n't", r.Values)));

我不是这方面的专家,但我认为你不能用小组来做到这一点。

分组 BY 聚合数据,当您想要执行诸如 SUMCOUNT AVG ...

我建议改为按bug number, id对行进行排序。这样,您将拥有一批又一批具有相同错误编号的行,并且每批将按列排序id

然后,当您循环访问项目时,每当错误编号发生变化时,都意味着您获得了一个新批次,因此您只需创建一个新部分即可。

我不知道是否有任何专门针对 C#、Linq 和 EF 情况的替代方案,但请记住,获取所有数据的 1 个查询通常比获取其子集的许多查询更好。

相关文章:
  • 没有找到相关文章