我把XML的数据加载到DataSet中后,想用DataTable.Compute("Sum(value1)","value2>35")进行统计。因为XML加载到DataSet都是String格式,所以不能对各字段进行统计。请问:有什么办法可以对DataTable来统计吗?不要告诉我对DataTable进行遍历,因数据量很大,条件也很复杂,采用遍历太繁杂。 
例如 xml如下:
  <?xml version="1.0" encoding="utf-8" ?> 
- <root>
  - <Tag1>
      <value1>42</value1> 
      <value2>35</value2> 
    </Tag1>
  - <Tag1>
      <value1>39</value1> 
      <value2>34.9</value2>
    </Tag1>
  - <Tag1>
      <value1>41</value1> 
      <value2>35.8</value2>
    </Tag1>
  - <Tag1>
      <value1>41</value1> 
      <value2>35.2</value2>
    </Tag1>
  </root>

解决方案 »

  1.   

    定义一份schema文件(xsd),这样你读入xml到dataset就有类型了。不过即便如此,如果要做复杂的统计,利用DataSet也不是一件容易的事情。再说.NET对DataSet的聚合操作也是要通过遍历的。都说数学没有用,现在是考验你数学和算法的功力了。
      

  2.   

    besides using a schema, if you know exactly what is in the xml file, you could1. create the table yourself, then readDataSet ds = new DataSet();
    DataTable dt = new DataTable("Tag1");
    dt.Columns.Add("value1", typeof(int));
    dt.Columns.Add("value2", typeof(double));

    ds.Tables.Add(dt);
    ds.ReadXml("TestDataSet.xml");
    Console.WriteLine(dt.Rows.Count); Console.WriteLine(dt.Compute("Sum(value1)","value2>35"));2. create an expression column to convert your dataDataSet ds = new DataSet();
    ds.ReadXml("TestDataSet.xml");
    Console.WriteLine(ds.Tables[0].Rows.Count);
    foreach(DataColumn dc in ds.Tables[0].Columns)
    Console.WriteLine(dc.ColumnName); ds.Tables[0].Columns.Add("newvalue1",typeof(int),"Convert(value1,'System.Int32')");
    ds.Tables[0].Columns.Add("newvalue2",typeof(double),"Convert(value2,'System.Double')"); Console.WriteLine(ds.Tables[0].Compute("Sum(newvalue1)"," newvalue2 > 35"));
      

  3.   

    用个循环,用个float.parse()就解决啦,不用用现成的函数啦
      

  4.   

    定义强类型的DataSet,可以通过vs.net设计器实现,然后加载xml文件。
    这样那些string类型就按你的强类型shema进行装载了,
    注意你的数据格式要正确。
      

  5.   

    问题解决了,后来是这样实现的:    我的数据本身都是放在数组中的,所以就没有再组成XML(原来组成XML格式是想能直接加载到dataset中)。现在就另建了个datatable,字段都设置数值型了,然后把数据在行记录增加到table中,这样就可以统计了。谢谢大家的帮助。
    当时也试了对加载后的table的列类型进行强制转换,但没成功。定义强类型DataSet的方法,没有试。