Как преобразовать sqldatareader в таблицу с определенной структурой на С#?

У меня есть SQLDatareader, который возвращает данные в формате:

58, A1
59, A2
60, A3
61, A4
62, B1
63, B2
64, B3
65, B4
66, C1
67, C2
68, C3
69, C4
70, D1
71, D2
72, D3
73, D4

Это может продолжаться для большего количества записей. Я хочу вернуть их в другом порядке (оба поля). Как это:

58, A1
62, B1
66, C1
70, D1
59, A2
63, B2
67, C2
71, D2
61, A3
64, B3
68, C3
72, D3
61, A4
65, B4
69, C4
73, D4

Есть ли способ сделать это?

Заранее спасибо, Дмитрий.


person Dimitris Rakopoulos    schedule 27.04.2015    source источник


Ответы (1)


Как указано здесь :

Класс SqlDataReader:

Предоставляет способ чтения прямого потока строк из базы данных SQL Server.

При этом, если вы не хотите изменять оператор sql или если вам это не разрешено, вы должны сначала сохранить результаты в памяти, а затем сделай что хочешь.

Одним из вариантов было бы определить класс, подобный приведенному ниже:

// The name of the class is vague. Not knowing
// what your data represent, is quite difficult to 
// give a proper name.
public class Result
{
    public int Number  { get; private set; }
    public string Text { get; private set; }

    public Result(int number, string text)
    {
        Number = number;
        Text = text;
    }
}

Затем я бы определил список объектов типа Result:

var results = new List<Result>();

После этого в цикле while, где вы читаете свои данные, я бы создал в каждом цикле объект типа Result:

var result = new Result(..,...);

а затем добавляем это в список results.

В конце у вас будет список Result объектов, которые вы можете отсортировать по своему усмотрению. Это можно было бы сделать довольно легко, используя LINQ.

var results = results.OrderBy(result=>result.Text[1]).ToList();

Вы можете проверить приведенное выше это .NET Fiddle

person Christos    schedule 27.04.2015