добавить в список через поток данных для каждого цикла

#c# #asp.net #datatable

#c# #asp.net #datatable

Вопрос:

Я просмотрел множество вопросов, я не могу найти ответ, который мне нужен. Заранее приношу извинения, если это дубликат.

У меня есть функция, которая возвращает imageslist список, который должен содержать каждую строку data.Table в качестве одного элемента

 public IList<string> ImageLoader()
{
    var data_str = new StringBuilder();
    DataSet data = new DataSet();
    SqlHelper db = new SqlHelper();
    data.Tables.Add(
        db.runQuery("SELECT * from Gallery")
    );
    data.Tables[0].TableName = "Images";
    foreach(DataRow row in data.Tables["Images"].Rows)
    {
        data_str.Append(
                row.ItemArray[1]
                  (row.ItemArray[2].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                  (row.ItemArray[3].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                  (row.ItemArray[4].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                  (row.ItemArray[5].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                );
        imagesList.Add(data_str.ToString());
    }
    return imagesList;
} 
  

Но с помощью этой функции я получаю неверный вывод:

P.S: Я также удалил imagesList.Add(data_str.ToString()); из цикла foreach, в этом случае вывод в порядке, но все это в одном элементе.

Желаемый результат:

Аэропорт, ПУСТО, ПУСТОЙ,ПУСТОЙ, ПУСТОЙ

Аэропорт, Терминал, ПУСТО, ПУСТОЙ,ПУСТОЙ

Аэропорт, Терминал, ПУСТО, ПУСТОЙ,ПУСТОЙ

AllStar, Розничная продажа, ПУСТО, ПУСТОЙ, ПУСТОЙ

ПУСТОЙ, Розничная продажа, ПУСТОЙ, ПУСТОЙ,ПУСТОЙ

ПУСТОЙ, Розничная продажа, ПУСТОЙ, ПУСТОЙ,ПУСТОЙ

ПУСТОЙ, Розничная продажа, ПУСТОЙ, ПУСТОЙ,ПУСТОЙ

ПУСТОЙ, Розничная продажа, ПУСТОЙ, ПУСТОЙ,ПУСТОЙ

МОЙ вывод:

Аэропорт, ПУСТО, ПУСТОЙ, ПУСТОЙ, ПУСТОЙ

Аэропорт, ПУСТОЙ, EMPTY, EMPTYAirport, Терминал, ПУСТОЙ, EMPTY, EMPTY

Аэропорт, ПУСТОЙ, EMPTY, EMPTYAirport, Терминал, ПУСТОЙ, EMPTYAirport, Terminal, EMPTY, ПУСТОЙ, EMPTY

Аэропорт, ПУСТОЙ, EMPTY, EMPTYAirport, Терминал, EMPTY, EMPTYAirport, Terminal, EMPTY, EMPTYAllStar, Розничная торговля, ПУСТОЙ, EMPTY, ПУСТОЙ

Аэропорт, ПУСТОЙ, EMPTY, EMPTYAirport, Терминал, EMPTY, EMPTYAirport, Terminal, EMPTY, EMPTYAllStar, Розничная торговля, ПУСТОЙ, EMPTY, РОЗНИЦА, ПУСТОЙ, EMPTY, EMPTY, EMPTY

Аэропорт, ПУСТОЙ, EMPTY, EMPTYAirport, Терминал, EMPTY, EMPTYAirport, Terminal, EMPTY, EMPTYAllStar, Розничная торговля, ПУСТОЙ, EMPTY, РОЗНИЧНАЯ торговля, ПУСТОЙ, EMPTY, РОЗНИЧНАЯ торговля, EMPTY, EMPTY, EMPTY, EMPTY

Аэропорт, ПУСТОЙ, EMPTY, EMPTYAirport, Терминал, EMPTY, EMPTYAirport, Terminal, EMPTY, EMPTYAllStar, Розничная торговля, EMPTY, ПУСТОЙ, EMPTY, Розничная торговля, EMPTY, EMPTY, EMPTY, Розничная торговля, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY

Аэропорт, ПУСТОЙ, EMPTY, EMPTYAirport, Терминал, EMPTY, EMPTYAIRPORT, Terminal, EMPTY, EMPTYAllStar, Розничная торговля, EMPTY, EMPTY, РОЗНИЧНАЯ торговля, EMPTY, ПУСТОЙ, EMPTY, Розничная торговля, EMPTY, EMPTY, EMPTY, Розничная торговля, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY

Ответ №1:

Вы продолжаете добавлять к переменной data_str, а затем добавляете ее в список. Вы должны пропустить data_str и добавить информацию о строке напрямую.

 public IList<string> ImageLoader()
{
    DataSet data = new DataSet();
    SqlHelper db = new SqlHelper();
    data.Tables.Add(
        db.runQuery("SELECT * from Gallery")
    );
    data.Tables[0].TableName = "Images";
    foreach(DataRow row in data.Tables["Images"].Rows)
    {
        imagesList.Add(row.ItemArray[1]
                  (row.ItemArray[2].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                  (row.ItemArray[3].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                  (row.ItemArray[4].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                  (row.ItemArray[5].ToString().Equals("") ? COMMA   "EMPTY" : COMMA   row.ItemArray[2])
                ));
    }
    return imagesList;
}