SelectGroupByInto не группируется! - PullRequest
1 голос
/ 28 июля 2010

Я пытаюсь использовать эту реализацию DataSetHelper для группировки DataSet по столбцу.

Что я делаю:

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 выглядит примерно так:

Пользователь ------ Время

Джон------ 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 Ответ

1 голос
/ 28 июля 2010

Ух ты, я никогда не думал, что это будет ошибка в классе 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 (),этот оригинал был == b.

В любом случае, спасибо!

...