C # DataTable OrderBy неправильно сортировать - PullRequest
0 голосов
/ 20 ноября 2018

Я написал некоторый код и получил неправильную сортировку.

Может кто-нибудь может объяснить?

          List<double> ii = new List<double>() { 1.2043801874, 1.2077423953, 1.9349906628 ,2.3225299029 ,2.4545523619 ,
                    2.7680609859 , 2.8905747132 ,2.9940913416 , 3.0737675373 ,3.2299437327 , 3.260846366  ,3.3004602464 ,
                    3.4006307085 , 3.513391731  ,3.6214660094 ,4.8013057532 , 5.8670500438 ,6.1397306939 , 7.1040729766 ,
                    8.0858126519 , 1.2356543405 ,1.3799212012 ,1.3976222125 ,1.5461464187 ,1.7162840558 ,1.7511717786 ,
                    10.2544634898, 2.0069778978 ,2.0262575594 ,2.0868135866 ,2.1595079322 ,2.25748278   ,2.4881372712 ,
                    2.9191324991 ,3.0847910479 , 3.1859703596 ,5.39216447   ,5.3949224157 ,9.3404802167 ,};
        DataTable input = new DataTable();
        input.Columns.Add("i");
        foreach(Double i in ii)
        {
            DataRow row = input.NewRow();
            row["i"] = i;
            input.Rows.Add(row);
        }

        DataTable Notsorted = input.AsEnumerable().OrderBy(x => x["i"]).CopyToDataTable();

результат изображение

1 Ответ

0 голосов
/ 20 ноября 2018

Когда вы создаете столбец, вы должны указать его тип данных, в противном случае предполагается, что он является строкой, а строка «10.2544634898» в алфавитном порядке меньше всех строк, начинающихся с «2», «3» и т. Д. *

input.Columns.Add("i", typeof(double));

Теперь сортировка по столбцу будет работать, корректно обрабатывая числа как числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...