Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net拆分xml数据表_C#_Asp.net_Datatable_Dataset - Fatal编程技术网

C# asp.net拆分xml数据表

C# asp.net拆分xml数据表,c#,asp.net,datatable,dataset,C#,Asp.net,Datatable,Dataset,我有一个从xml文件填充的数据集,我想将主数据表拆分为几个数据表 假设这是表格的格式: Column1 | Column2 1234 | 4567 1234 | 1122 1234 | 2233 1000 | 3344 1000 | 5566 我需要将上面的数据分成两个表,一个包含所有1234个值,另一个包含1000个值 以下是我如何读取xml文件并正确工作的方法: WebClient wc = new WebClient(); wc.Cr

我有一个从xml文件填充的数据集,我想将主数据表拆分为几个数据表

假设这是表格的格式:

Column1 | Column2
1234    | 4567
1234    | 1122
1234    | 2233
1000    | 3344
1000    | 5566
我需要将上面的数据分成两个表,一个包含所有1234个值,另一个包含1000个值

以下是我如何读取xml文件并正确工作的方法:

WebClient wc = new WebClient();
            wc.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            string strXmlString = wc.DownloadString(strUrl); // Download the URL to a string
            strXmlString = Regex.Replace(strXmlString, @"m:null.+?>{1}", @"/>"); // Find ' m:null[anything]>' and replace it with '/>'
            strXmlString = Regex.Replace(strXmlString, @"[\s]{1}m:.+?>{1}", @">"); // Find ' m:type[anything]>' and replace it with '>'
            XmlDocument xDoc = new XmlDocument();
            xDoc.LoadXml(strXmlString); // Load the XML String into an XML Doc
            XmlReader xReader = new XmlNodeReader(xDoc);
            DataSet ds = new DataSet();
            ds.ReadXml(xReader); // Upload the XML Doc Data to the DataSet

如何将
ds.表[0]
拆分为两个表?

您可以使用Linq和Speciall
Enumerable.GroupBy

var column1Groups = ds.Tables[0].AsEnumerable()
    .GroupBy(r => r.Field<string>("Column1"));
foreach(var group in column1Groups)
{
    // if you need only the 1234  and 1000 groups:
    if(group.Key == "1000" || group.Key == "1234")
    {
        ds.Tables.Add(group.CopyToDataTable());
    }
}
var column1Groups=ds.Tables[0].AsEnumerable()
.GroupBy(r=>r.Field(“Column1”);
foreach(column1Groups中的变量组)
{
//如果您只需要1234和1000组:
if(group.Key==“1000”| | group.Key==“1234”)
{
Add(group.CopyToDataTable());
}
}
与几乎纯Linq相同:

var valuesNeeded = new[]{ "1000", "1234" };
var newTables = ds.Tables[0].AsEnumerable()
    .GroupBy(r => r.Field<string>("Column1"))
    .Where(g => valuesNeeded.Contains(g.Key))
    .Select(g => g.CopyToDataTable())
    .ToArray();
ds.Tables.Clear(); // if you need to clear it first
ds.Tables.AddRange( newTables );
var valuesneed=new[]{“1000”,“1234”};
var newTables=ds.Tables[0].AsEnumerable()
.GroupBy(r=>r.Field(“Column1”))
其中(g=>valuesNeeded.Contains(g.Key))
.Select(g=>g.CopyToDataTable())
.ToArray();
ds.Tables.Clear();//如果你需要先清除它
ds.Tables.AddRange(新表);
DataTable dt1  = ds.Tables[0].Select("Column1 ='1000'").CopyToDataTable();
DataTable dt2 = ds.Tables[0].Select("Column1 ='1234'").CopyToDataTable();