首页 > 解决方案 > 如何在 ado.net 中编写由数据字典组成的查询

问题描述

我想编写使用 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);
}

但我收到了类似的错误

Keypair 值不包含 Name 的定义,并且没有可访问的 >extension 方法 Name 接受 KeyValuepair 类型的第一个参数

我想在 ado.net 中处理该查询,就像在上面显示的 linq 中一样。

标签: c#linqado.netsqlcommanddata-dictionary

解决方案


我会做这样的事情:

        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());

推荐阅读