C# Метод, возвращающий результат MysqlDataReader (возвращает список с двумя или более значениями) - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь сделать метод. Так что я смогу получить результат queryText. Но использование Dictionary не вариант, так как ключ должен быть уникальным, в некоторых случаях это не так.

Идея состоит в том, что я должен быть в состоянии сделать что-то вроде этого:

var storeQuery = StoreQuery(query);
storeQuery["first_name"] or storeQuery["last_name"]
public Dictionary<string, object> StoreQuery(string queryText)
{
    Dictionary<string, object> queryDictionary = new Dictionary<string, object>();
    using (MySqlConnection connection = CreateConnection())
    {
        using (MySqlCommand command = new MySqlCommand(queryText, connection))
        {
            using (MySqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        queryDictionary.Add(reader.GetName(i), reader.GetValue(i));
                    }
                }
            }
        }
    }
    return queryDictionary;
}

1 Ответ

0 голосов
/ 09 апреля 2020

Как вы заявили сами, у вас не может быть Dictionary с ключами, которые не являются уникальными, поэтому оба варианта в моем ответе предполагают, что вам необходимо первое вхождение ключа:

Вариант 1: использование List из Tuple с

    public List<Tuple<string, string>> StoreQuery(string queryText)
    {
        List<Tuple<string, string>> queryList = new List<Tuple<string, string>>();
        using (MySqlConnection connection = CreateConnection())
        {
            using (MySqlCommand command = new MySqlCommand(queryText, connection))
            {
                using (MySqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            queryList.Add(reader.GetName(i), reader.GetValue(i));
                        }
                    }
                }
            }
        }
        return queryList;
    }

Использование:

        var storeQuery = StoreQuery(query);
        storeQuery.FirstOrDefault(x => string.Equals(x.Item1, "first_name"));//this will return first oocurance of "first_name" as a key

Вариант 2: использование List из KeyValuePair с:

    public List<KeyValuePair<string, string>> StoreQuery(string queryText)
    {
        List<KeyValuePair<string, string>> queryList = new List<KeyValuePair<string, string>>();
        using (MySqlConnection connection = CreateConnection())
        {
            using (MySqlCommand command = new MySqlCommand(queryText, connection))
            {
                using (MySqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            queryList.Add(reader.GetName(i), reader.GetValue(i));
                        }
                    }
                }
            }
        }
        return queryList;
    }

Использование:

        var storeQuery = StoreQuery(query);
        storeQuery.FirstOrDefault(x => string.Equals(x.Key, "first_name"));//this will return first oocurance of "first_name" as a key
...