0

xml ファイルから入力される DataSet があり、そのメインの DataTable を複数の DataTable に分割したいと考えています。

これがテーブルの形式であるとしましょう:

Column1 | Column2
1234    | 4567
1234    | 1122
1234    | 2233
1000    | 3344
1000    | 5566

上記を 2 つのテーブルに分割する必要があります。

これは私が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.Tables[0]を2つのテーブルに分割するにはどうすればよいですか?

4

2 に答える 2

1

Linq と especial を使用できます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());
    }
}

ほぼ純粋な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 );
于 2013-10-02T09:47:13.473 に答える
1
DataTable dt1  = ds.Tables[0].Select("Column1 ='1000'").CopyToDataTable();
DataTable dt2 = ds.Tables[0].Select("Column1 ='1234'").CopyToDataTable();
于 2013-10-02T09:48:33.963 に答える