首页 > 解决方案 > 当父母相同时如何分组列出孩子

问题描述

我有一个Business看起来像这样的列表(Company:list parent;Item:list children)

Business
--------
CompanyA
    TaxRate
    Item1
        Name
        Price
        Total
    Item2
        Name
        Price
        Total
    Month
CompanyB
    TaxRate
    Item3
        Name
        Price
        Total
    Item4
        Name
        Price
        Total
    Month
CompanyA
    TaxRate
    Item5
        Name
        Price
        Total
    Item6
        Name
        Price
        Total
    Month

我想CompanyTaxRate这个分组

Business
--------
CompanyA
    TaxRate
    Item1
        Name
        Price
        Total
    Item2
        Name
        Price
        Total
    Item5
        Name
        Price
        Total
    Item6
        Name
        Price
        Total
    Month
CompanyB
    TaxRate
    Item3
        Name
        Price
        Total
    Item4
        Name
        Price
        Total
    Month   

我希望有人会在这种情况下帮助我

标签: c#asp.netalgorithmentity-frameworklinq

解决方案


这是我发现完成任务的最佳方式:

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
using System.Diagnostics;
using System.Data;

namespace ConsoleApplication45
{
    class Program
    {

        static void Main(string[] args)
        {
            List<Business> companies = new List<Business>() {
                new Business() { name = "CompanyA",items = new List<Item>(){ new Item() { name = "Item1"}, new Item() { name = "Item2"}}},
                new Business() { name = "CompanyB", items = new List<Item>() { new Item() { name = "Item3"}, new Item() { name = "Item4"}}},
                new Business() { name = "CompanyA",items = new List<Item>(){ new Item() { name = "Item5"}, new Item() { name = "Item6"}}},
            };


            var groups = companies.GroupBy(x => x.name).Select(x => new { business = x.FirstOrDefault(), items = x.SelectMany(y => y.items) });
            List<Business> newCompanies = new List<Business>();
            foreach (var group in groups)
            {
                Business company = group.business;
                company.items = group.items.ToList();
                newCompanies.Add(company);
            }
        }

    }
    public class Business
    {
        public string name { get; set; }
        public List<Item> items { get; set; }
        public decimal taxrate { get; set; }
        public string month { get; set; }
    }
    public class Item
    {
        public string name { get;set;}
        public decimal price { get;set;}
        public decimal total { get;set;}
    }
}

推荐阅读