Можно ли вернуть массив словарей?

#asp.net-core

Вопрос:

Я написал функцию, которая будет возвращать одну запись sql в виде словаря. Можно ли вернуть массив словарей, чтобы я мог вернуть несколько записей таким образом?

 public static async Task<Dictionary<string, string>> SQLMultiRecordToDictionary(string TableName, string SearchField, string SearchValue)
    {
        Dictionary<string, string> QueryResult = new Dictionary<string, string>();
        // is TableName sane
        if (!IsTextSane(TableName)) { return QueryResu< }
        //
        await using (var connection = new SqliteConnection("Data Source="   dbFullPathName))
        {
            connection.Open();

            SqliteCommand sqlcmd = connection.CreateCommand();
            sqlcmd.CommandText = "SELECT * FROM "   TableName   " WHERE "   SearchField   "=@SearchValue";
            sqlcmd.Parameters.AddWithValue("@SearchValue", SearchValue);

            SqliteDataReader sqlreader = sqlcmd.ExecuteReader();
            // generate dictionary keys with blank values
            // this prevents key not existing issues when no record is returned
            // i prefer no/blank values in the keys when no record returned for this project
            for (int i = 0; i < sqlreader.FieldCount; i  )
            {
                QueryResult.Add(sqlreader.GetName(i), ""); // blank value
            }
            // add the values to the keys
            while (sqlreader.Read())
            {
                for (int i = 0; i <= sqlreader.FieldCount - 1; i  )
                {
                    QueryResult[sqlreader.GetName(i)] = sqlreader.GetString(i);
                }
            }
            return QueryResu<
        }
    }
 

Комментарии:

1. Вместо этого вы должны использовать список<<Словарь<строка, строка><строка, строка>>, а затем добавить свои записи в этот список

2. О, мне нравится эта идея!

Ответ №1:

Конечный результат работы благодаря Tisa:

 public static async Task<List<Dictionary<string, string>>> SQLMultiRecordToDictionaryList(string TableName, string SearchField, string SearchValue)
    {
        List<Dictionary<string, string>> QueryResult = new List<Dictionary<string, string>>();
        Dictionary<string, string> SQLRecord = new Dictionary<string, string>();
        //
        // is TableName sane, if not return nothing
        if (!IsTextSane(TableName)) { return QueryResu< }
        //
        await using (var connection = new SqliteConnection("Data Source="   dbFullPathName))
        {
            connection.Open();

            SqliteCommand sqlcmd = connection.CreateCommand();
            sqlcmd.CommandText = "SELECT * FROM "   TableName   " WHERE "   SearchField   "=@SearchValue";
            sqlcmd.Parameters.AddWithValue("@SearchValue", SearchValue);

            SqliteDataReader sqlreader = sqlcmd.ExecuteReader();

            // generate dictionary keys with blank values if no rows
            // this prevents key not existing issues when no record is returned
            // i prefer no/blank values in the keys when no record returned for this project
            if (!sqlreader.HasRows)
            {
                for (int i = 0; i < sqlreader.FieldCount; i  )
                {
                    SQLRecord.Add(sqlreader.GetName(i), ""); // blank value
                }
                QueryResult.Add(SQLRecord);
            }
            //
            // add the values to the keys if there are rows (this doesn't run if no rows returned)
            while (sqlreader.Read())
            {
                SQLRecord = new Dictionary<string, string>();
                for (int i = 0; i <= sqlreader.FieldCount - 1; i  )
                {
                    SQLRecord.Add(sqlreader.GetName(i), sqlreader.GetString(i));
                }
                QueryResult.Add(SQLRecord);
            }
            return QueryResu<
        }
    }
 

Комментарии:

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