通过ID和OrderID将数据集数据分割为多个数据表

时间:2016-10-23 07:09:23

标签: c#

我收到一个DataSet,其中包含一个包含所有重复ItemCode和OrderID的DataTable。

我可以将DS.Tables [0]下面转换为多个数据表,这些数据表由不同的ItemCode和OrderID使用linq分组。



$.pjax.reload({container:'#gridid'});




2 个答案:

答案 0 :(得分:0)

以下是一个例子:

using System;
using System.Data;
using System.Linq;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var DS = new DataSet();
            DS.Tables.Add();
            DS.Tables[0].Columns.Add("ItemID", typeof(int));
            DS.Tables[0].Columns.Add("OrderID", typeof(int));
            DS.Tables[0].Columns.Add("ItemName");
            DS.Tables[0].Rows.Add(1, 12, "Item1");
            DS.Tables[0].Rows.Add(1, 12, "Item1");
            DS.Tables[0].Rows.Add(1, 13, "Item1");
            DS.Tables[0].Rows.Add(1, 13, "Item1");
            DS.Tables[0].Rows.Add(2, 12, "Item1");
            DS.Tables[0].Rows.Add(2, 13, "Item1");
            DS.Tables[0].Rows.Add(2, 13, "Item1");
            DS.Tables[0].Rows.Add(3, 13, "Item1");
            DS.Tables[0].Rows.Add(3, 13, "Item1");
            DS.Tables[0].Rows.Add(3, 13, "Item2");
            DS.Tables[0].Rows.Add(3, 13, "Item1");

            var results = DS.Tables[0].AsEnumerable()
                .GroupBy(x => new
                {
                    ItemID = x.Field<int>(0),
                    OrderID = x.Field<int>(1)
                })
                .Select(x =>
                {
                    var t = new DataTable();
                    t.Columns.Add("ItemName");
                    x.ToList().ForEach(y => t.Rows.Add(y.Field<string>(2)));
                    return new { x.Key, Table = t };
                });

            foreach (var i in results)
            {
                Console.WriteLine("\n[ ItemID: " + i.Key.ItemID + ", OrderID: " + i.Key.OrderID + " ]");
                foreach (var row in i.Table.AsEnumerable())
                    Console.WriteLine("  " + row[0]);
            }

            Console.WriteLine("\nPress any key...");
            Console.ReadKey();
        }
    }
}

答案 1 :(得分:0)

输入看起来像html,而不是xml。某些html可以使用xml处理,如下所示

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


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            XDocument table = XDocument.Load(FILENAME);

            List<XElement> rows = table.Descendants("tr").ToList();

            foreach (XElement col in rows[0].Elements("th").ToArray())
            {
                dt.Columns.Add((string)col, typeof(string));
            }
            for (int i = 1; i < rows.Count; i++)
            {
                dt.Rows.Add(rows[i].Elements("td").Select(x => (string)x).ToArray());
            }

            DataTable dt1 = dt.AsEnumerable().Where(x => x.Field<string>("ItemName") == "Item1").CopyToDataTable();
            DataTable dt2 = dt.AsEnumerable().Where(x => x.Field<string>("ItemName") == "Item2").CopyToDataTable();

        }
    }
}