我收到一个DataSet,其中包含一个包含所有重复ItemCode和OrderID的DataTable。
我可以将DS.Tables [0]下面转换为多个数据表,这些数据表由不同的ItemCode和OrderID使用linq分组。
$.pjax.reload({container:'#gridid'});

答案 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();
}
}
}