按列对表的行进行分组

时间:2016-03-04 19:23:51

标签: c# asp.net-mvc entity-framework linq entity-framework-core

我有这张桌子:

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);
        // ??? 
    }
}

2 个答案:

答案 0 :(得分:1)

是的,您必须使用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)));

答案 1 :(得分:0)

我不是这方面的专家,但我不认为你可以通过小组来做到这一点。

通过聚合数据进行分组,在您想要执行SUMCOUNTAVG ...

等操作时非常有用

我建议您按bug number, id订购行。这样,您将拥有一个接一个地具有相同错误编号的批次行,并且每个批次将按列id

进行排序

然后,当您遍历项目时,只要错误编号发生变化,就意味着您获得了一个新批处理,因此您只需创建一个新部分。

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