2010-07-28 53 views
1

我正在尝试使用this implementation of a DataSetHelper按列对数据集进行分组。SelectGroupByInto不是分组!

我在做什么是:

DataSet ds_tmp = new DataSet(); 
DataTable dt_tmp; 
ds_tmp.Tables.Add(data_table_UserTime); 
dsHelper = new DataSetHelper(ref ds_tmp); 
dt_tmp = dsHelper.SelectGroupByInto("UniqueUsers", ds_tmp.Tables[0], "User, sum(Time) TotalTime", "Time>0", "User"); 

data_table_UserTime是这样的:

用户 ------ 时间

John- ----- 0.6

马克------ 1.2

保罗------ 7.1

约翰------ 52.6

约翰------ 0.8

保罗------ 50.3

最后,dt_tmp应该有这样的:

用户 ------ 时间

约翰------ 54.0

马克------ 1.2

保罗------ 57.4

但是我所得到的是这样的:

用户 ------ 时间

约翰------ 0.6

约翰------ 52.6

约翰------ 0.8

马克------ 1.2

保罗------ 7.1

保罗------ 50.3

因此,它似乎没有做这个总和(时间)。

会发生什么?

在此先感谢。

回答

1

哇,我从来没有想过这将是一个DataSetHelper类中的错误。它似乎有一些数值的问题。

功能ColumnEqual应改为:

private bool ColumnEqual(object a, object b) 
{ 
    /* 
    * Compares two values to see if they are equal. Also compares DBNULL.Value. 
    * 
    * Note: If your DataTable contains object fields, you must extend this 
    * function to handle them in a meaningful way if you intend to group on them. 
    */ 
    if ((a is DBNull) && (b is DBNull)) 
     return true; //both are null 
    if ((a is DBNull) || (b is DBNull)) 
     return false; //only one is null 
    return (a.ToString() == b.ToString()); //value type standard comparison 
} 

所不同的是在a.ToString()== b.ToString(),即渊源是==湾

无论如何,谢谢!