我尝试从DB获取数据并插入到Dictionary
数据如:(来自数据库的列)Email.Email和(来自数据库的列)错误消息无效的电子邮件
(来自DB的列)Email.Required(来自DB的列)错误消息此字段是必需的
我想创建字典看起来像
Dictionary<string , Dictionary<string,string>>
结果是:
<Email, <Email, Invalid email>
<Email, < Required, This field is required>
我开始做:
Email = new Dictionary<string, Dictionary<string, string>>()
{
{
data.Where(k => k.Key.Contains("Email."))
.Select( k => k.Key.Split(new string[] { "." }, StringSplitOptions.None)[0])
.FirstOrDefault(),new Dictionary<string, string>()
{
{
data.Where(k => k.Key.Contains("Email."))
.Select( k => k.Key.Split(new string[] { "." }, StringSplitOptions.None)[1])
.FirstOrDefault(),
"VALUE"
}
}
}
}
我得到的结果似乎是
<Email,<Required,value>>
但我没有成功采取
<Email,<Email,value>>
编辑:
数据如下:
我没有例外,因为我只有一个“电子邮件”,这个键我有字典,我存储了值
*我的解决方案*
Email = new Dictionary<string, Dictionary<string, string>>()
{
{
_dataFromDB.Where(k => k.Key.Contains("Email.")).Select( k => k.Key.Split(new string[] { "." }, StringSplitOptions.None)[0]).FirstOrDefault(),
_dataFromDB.Where(k=> k.Key.Contains("Email.")).ToDictionary( k => split(k.Key) , va => va.Value )
}
}
private string split(String key)
{
string[] values = key.Split(new string[] { "." }, StringSplitOptions.None);
return values[1];
}
答案 0 :(得分:0)
你不能拥有这个
结果是:
<Email, <Email, Invalid email>
<Email, < Required, This field is required>
由于词典仅允许使用唯一键
你可以做的是:
List<KeyValuePair<string , Dictionary<string,string>>
然后使用
在列表中添加您想要的内容list.Add(new KeyValuePair<string,Dictionary<string,string>>("Email", dictionary here));
答案 1 :(得分:0)
根据您所写的内容,您的数据看起来类似于以下数组所代表的内容:
var data = new [] {
new { Col1 = "Email.Email", Col2 = "Invalid email" },
new { Col1 = "Email.Required", Col2 = "This field is required" },
};
您需要使用group by来获取所有需要位于“inner”目录中的行。
要获得所需的结构,可以使用以下代码
var results = (
from row in data.Select(x => new { Key1 = x.Col1.Split('.')[0], Key2 = x.Col1.Split('.')[1], Col2 = x.Col2 })
group row by row.Key1 into g
select new { Key = g.Key, Value = g.ToDictionary(k => k.Key2, v => v.Col2) }
)
.ToDictionary(x=>x.Key, x=>x.Value);