Как написать запрос в Ado.net состоит из словаря данных - PullRequest
0 голосов
/ 11 июля 2019

Я хочу написать запрос, который написан с использованием linq и словаря данных. Я хочу преобразовать этот запрос в форму ado.net

var insData = new Dictionary<string, string>();

                    insData = db.Query<TableName>("select Name, Value from Table where PId={id} and type<>{(int)Enum.PElement}").ToDictionary(key => key.Name??t.TName, Val => Val.Value);

Это запрос, который я хочу преобразовать в форму ado.net для предоставления словаря с этим типом

ToDictionary (key => key.Name??t.TName, Val => Val.Value);

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

Вот код, который я пробовал

var dictonary = new SqlCommand($"select Name, Value from Table where PId={id} and type<>{(int)Enum.PElement}", con);
                    SqlDataAdapter sda2 = new SqlDataAdapter(dictonary);
                    DataSet ds2 = new DataSet();
                    sda2.Fill(ds2);
                    IEnumerable<DataRow> dataRows = ds2.Tables[0].Rows.Cast<DataRow>().ToList();
                    var insData = new Dictionary<string, string>();

 foreach (DataRow row2 in dataRows )
 {
insData.ToDictionary(key => key.Name ?? t.TName, Val => Val.Value);
}

но я получаю ошибку как

Значение пары ключей не содержит определения Name и недоступно> метод расширения Name, принимающий первый аргумент типа KeyValuepair

Я хочу обработать этот запрос в ado.net так же, как он работает в linq, который я показал выше.

1 Ответ

1 голос
/ 11 июля 2019

Я сделаю что-то вроде этого:

        IEnumerable<DataRow> dataRows;
        using (var dataSet = new DataSet())
        {
            using (var command = new SqlCommand($"select Name, Value from Table where PId={id} and type<>{(int) Enum.PElement}", con))
            {
                using (var sda2 = new SqlDataAdapter(command))
                {
                    sda2.Fill(dataSet);
                }
            }

            dataRows = dataSet.Tables[0].Rows.OfType<DataRow>();
        }

        return dataRows.ToDictionary(row => row["Name"].ToString(), row => row["Value"].ToString());
...