Строка, разделенная запятыми, из столбца DataReader

Каков хороший способ сохранить определенный столбец DataReader в строке, разделенной запятыми?

Например, вот что у меня сейчас:

     StringBuilder sb = new StringBuilder(); 
     Database db = DatabaseFactory.CreateDatabase();
     using(DbCommand dbcmd = mydb.GetStoredProcCommand("ProcStoredProc")) //No Parameters
     {
       IDataReader dr = db.ExecuteReader(sqlcmd)
       while(dr.Read())
       {
                 sb.AppendFormat("{0},",dr["CODE"]);
       }
       dr.Dispose();
     }

     // skipped code to remove the last comma. 
     string CSVString = sb.ToString();

В этом примере DataReader не будет содержать более 10 строк.

Спасибо.


person FMFF    schedule 23.01.2012    source источник
comment
Что не так с тем, что у вас есть сейчас?   -  person Chris Shain    schedule 23.01.2012
comment
Спасибо @Chris Shain: кажется, слишком много шагов, чтобы получить 10 строк; Интересно, есть ли к этому элегантный подход. Спасибо.   -  person FMFF    schedule 23.01.2012
comment
Мне кажется, это нормально. Большая часть того, что у вас есть, связана с подключением к базе данных - синтаксический сахар может сократить это, но вся работа, которую он выполняет, по-прежнему будет выполняться.   -  person Chris Shain    schedule 23.01.2012
comment
Приведет ли использование DataSet / DataTable к меньшему количеству строк кода?   -  person FMFF    schedule 23.01.2012
comment
Вряд ли, да и будет медленнее.   -  person Chris Shain    schedule 23.01.2012
comment
Код мне нравится. Я бы реорганизовал код подключения к базе данных, который можно было бы повторно использовать для выполнения функций чтения. Мы также могли бы использовать dataadapter с набором данных, где мы можем перечислять строки с помощью linq. Таким образом, мы могли избежать цикла while. Тем не менее, это только элегантный способ. Строки кода, которые необходимо выполнить, такие же.   -  person Amzath    schedule 23.01.2012


Ответы (1)


Некоторым синтаксическим сахаром может быть:

using(var dbcmd = mydb.GetStoredProcCommand("ProcStoredProc"))
using(var dr = db.ExecuteReader(sqlcmd))
  var result = string.Join(",", reader.AsEnumerable().Select (r => r["Code"]));

Вспомогательная функция

public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader)
{
    while (reader.Read())
        yield return reader;
}
person Magnus    schedule 23.01.2012