如何使用SQL表数据填充字典

时间:2018-07-28 14:39:13

标签: c# sql oracle dictionary

在我的C#项目中,我有一个字典,它的值目前是静态的。

var dict = new Dictionary<string, string>
{
    ["0000"] = "UK",
    ["1111"] = "JAPAN",
    ["2222"] = "CHINA",
    ["3333"] = "SRI LANKA",
    ["4444"] = "AUSI",
    ["5555"] = "USA",
};

现在,我需要动态设置其值。我怎样才能做到这一点?我有一个名为“ country”的Oracle数据库表,有两列,分别为IDCountryName

ID  CID     CountryName

1   0000    UK
2   1111    JAPAN
3   2222    CHINA
4   3333    SRI LANKA
5   4444    AUSI
6   5555    USA

如何将此表值设置为字典?预先感谢。

2 个答案:

答案 0 :(得分:2)

使用oracle dataadapter将数据放入数据表中(请参见https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledataadapter(v=vs.110).aspx)。然后使用下面的代码。您不需要像我一样将数据放入数据表中。刚刚将数据添加到表中以测试用于创建字典的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable  dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("CID", typeof(string));
            dt.Columns.Add("CountryName", typeof(string));

            dt.Rows.Add(new object[] {1, "0000", "UK"});
            dt.Rows.Add(new object[] {2, "1111", "JAPAN"});
            dt.Rows.Add(new object[] {3, "2222", "CHINA"});
            dt.Rows.Add(new object[] {4, "3333", "SRI LANKA"});
            dt.Rows.Add(new object[] {5, "4444", "AUSI"});
            dt.Rows.Add(new object[] {6, "5555", "USA"});

            Dictionary<string, string> dict = dt.AsEnumerable()
                .GroupBy(x => x.Field<string>("CID"), y => y.Field<string>("CountryName"))
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
        }
    }
}

答案 1 :(得分:1)

如果您具有Oracle 12.2,则可以执行查询,该查询通过使用JSON_ARRAY返回json字符串:

select JSON_ARRAY (cid, countryname) from country

如果您的数据为json格式,则很容易通过使用Json.Net将其转换为字典:

string json = @"{""0000"":""UK"",""1111"":""Japan""}";

var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);