删除主键并加入数据表中的行

Removing Primary Key and Joining Rows in Datatable

我正在尝试对 DataTable 进行排序,以便能够在 C# 中按订单获得最畅销的商品。 DataTable 的字段是 orderIdproductIdsizeamount(金额=购买了多少)。 table 中的当前主键由 orderIdproductIdsize 组成.我想通过以删除 orderId 并具有 productId 和 [的方式对 table 进行排序来获得最畅销的商品=13=]size 作为新的主键,amount 作为所有 amount 订单的总和productIdsize。 最好的方法是什么?我附上了我当前的 table 数据以供参考。 My table data for reference。 如果有任何不清楚的地方请告诉我,这是我第一次使用 Stack Overflow。

尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication20
{
    class Program
    {
        static void Main(string[] args)
        {

            DataTable dt = new DataTable();
            dt.Columns.Add("orderid", typeof(int));
            dt.Columns.Add("productid", typeof(int));
            dt.Columns.Add("size", typeof(int));
            dt.Columns.Add("amount", typeof(int));

            dt.Rows.Add(new object[] { 1, 1, 38, 12 });
            dt.Rows.Add(new object[] { 1, 1, 41, 6 });
            dt.Rows.Add(new object[] { 1, 2, 36, 8 });
            dt.Rows.Add(new object[] { 1, 2, 38, 5 });
            dt.Rows.Add(new object[] { 1, 3, 46, 2 });
            dt.Rows.Add(new object[] { 4, 3, 40, 7 });
            dt.Rows.Add(new object[] { 8, 3, 40, 7 });
            dt.Rows.Add(new object[] { 9, 2, 40, 9 });
            dt.Rows.Add(new object[] { 12, 2, 37, 5 });
            dt.Rows.Add(new object[] { 13, 2, 37, 4 });
            dt.Rows.Add(new object[] { 14, 2, 38, 3 });
            dt.Rows.Add(new object[] { 15, 3, 41, 4 });
            dt.Rows.Add(new object[] { 16, 2, 36, 7 });
            dt.Rows.Add(new object[] { 16, 3, 41, 5 });
            dt.Rows.Add(new object[] { 17, 2, 38, 4 });
            dt.Rows.Add(new object[] { 18, 3, 40, 3 });
            dt.Rows.Add(new object[] { 19, 5, 38, 9 });
            dt.Rows.Add(new object[] { 20, 2, 36, 2 });
            dt.Rows.Add(new object[] { 21, 1, 40, 3 });
            dt.Rows.Add(new object[] { 22, 1, 38, 8 });
            dt.Rows.Add(new object[] { 23, 1, 40, 9 });
            dt.Rows.Add(new object[] { 24, 2, 37, 1 });
            dt.Rows.Add(new object[] { 25, 5, 39, 4 });
            dt.Rows.Add(new object[] { 2034, 3, 40, 3 });
            dt.Rows.Add(new object[] { 2035, 2, 37, 6 });
            dt.Rows.Add(new object[] { 2035, 3, 40, 5 });
            dt.Rows.Add(new object[] { 2036, 2, 36, 2 });
            dt.Rows.Add(new object[] { 2037, 2, 37, 3 });
            dt.Rows.Add(new object[] { 2037, 3, 41, 7 });
            dt.Rows.Add(new object[] { 2038, 1, 39, 3 });
            dt.Rows.Add(new object[] { 2038, 5, 37, 4 });

            var results = dt.AsEnumerable()
                .GroupBy(x => new { productid = x.Field<int>("productid"), size = x.Field<int>("size") })
                .Select(x => new { productid = x.Key.productid, size = x.Key.size, count = x.Count(), total = x.Sum(y => y.Field<int>("amount")) })
                .OrderByDescending(x => x.count)
                .ToList();
 
        }
    }
 
    
}