按ID和OrderID将Dataset数据表拆分为多个数据表
本文关键字:数据表 拆分 Dataset ID OrderID | 更新日期: 2023-09-27 18:14:19
我收到了一个包含所有重复ItemCode和OrderID的数据表的数据集。
我可以在DS下面转换吗?表[0]到多个数据表,这些数据表由不同的ItemCode和OrderID使用linq.
<table>
<tr><th>ItemID</th><th>OrderID</th><th>ItemName</th></tr>
<tr><td>1</td><td>12</td><td>Item1</td></tr>
<tr><td>1</td><td>12</td><td>Item1</td></tr>
<tr><td>1</td><td>13</td><td>Item1</td></tr>
<tr><td>1</td><td>13</td><td>Item1</td></tr>
<tr><td>2</td><td>12</td><td>Item1</td></tr>
<tr><td>2</td><td>13</td><td>Item1</td></tr>
<tr><td>2</td><td>13</td><td>Item1</td></tr>
<tr><td>3</td><td>13</td><td>Item1</td></tr>
<tr><td>3</td><td>13</td><td>Item1</td></tr>
<tr><td>3</td><td>13</td><td>Item2</td></tr>
<tr><td>3</td><td>13</td><td>Item1</td></tr>
</table>
下面是一个例子:
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();
}
}
}
输入看起来像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();
}
}
}