C#GroupBy-创建多个分组级别 [英] C# GroupBy - Creating multiple grouping levels

查看:53
本文介绍了C#GroupBy-创建多个分组级别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

提供以下课程:

public class Transaction
{
    public string Category { get; set; }
    public string Form { get; set; }
}

如何获得按类别 Form 分组的交易分组?

How do I get a grouping of transactions that are grouped by both the Category and the Form?

基本上我希望它像这样输出:

Basically I want it to output like so:

Category 1
    Form 1
        Transaction1
        Transaction2
        Transaction3
        ...
    Form 2
        Transaction1
        Transaction2
        Transaction3
        ...
Category 2
    Form 1
        Transaction1
        Transaction2
        Transaction3
        ...
    Form 2
        Transaction1
        Transaction2
        Transaction3
        ...

推荐答案

我结束了以下内容,因为分组需要在对集合进行迭代之前完成.

I ended up with the following, because the grouping need to be complete before the iteration over the collection.

种子一些交易

var cats = new[] { "Category 1", "Category 2", "Category 3" };
var frms = new[] { "Form 1", "Form 2", "Form 3" };
var transactions = new List<Transaction>();

for (var i = 0; i <= 150; i++)
{
    transactions.Add(new Transaction
    {
        Category = i % 2 == 0 ? cats[0] : i % 3 == 0 ? cats[1] : cats[2],
        Form = i % 5 == 0 ? frms[0] : i % 7 == 0 ? frms[1] : frms[2]
    });
}

分组

var groupedTransactions = transactions.GroupBy(x => x.Category)
    .Select(x => new
    {
        Category = x.Key,
        Forms = x.ToList()
            .GroupBy(y => y.Form)
    });

将其写入控制台

foreach (var group in groupedTransactions.OrderBy(x => x.Category))
{
    Console.WriteLine(group.Category);
    foreach (var form in group.Forms.OrderBy(x => x.Key))
    {
        Console.WriteLine("\t" + form.Key);
        foreach (var transaction in form)
        {
            Console.WriteLine("\t\t" + transaction.Id);
        }
    }
}

这篇关于C#GroupBy-创建多个分组级别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆