C# 将字典数据转换为数据表
在C#中将C# 将字典数据转换为数据表,c#,C#,在C#中将字典转换为数据表时,我遇到了一个问题 我在字典中的值为Dict Eg值- (Key) - , (Value) - Id Pin Desc IsEligible- 1 A1 XYZ 0 2 A2 ABC 1 (Key) - , (Value) -
字典
转换为数据表
时,我遇到了一个问题
我在字典中的值为Dict
Eg值-
(Key) - , (Value) -
Id Pin Desc IsEligible-
1 A1 XYZ 0
2 A2 ABC 1
(Key) - , (Value) -
Id Pin Desc IsEligible-
1 A1 XYZ 1
2 A2 ABC 0
我希望结果是这样的-
Id Pin Desc IsEligible- IsEligible-
1 A1 XYZ 0 1
2 A2 ABC 1 0
填充字典的代码是-
resultSet.Add(eff,spResult.ToList());
这是我的密码。它添加了一个字符串作为键,它是VA305
,它添加了一个列表作为值,它的类型是{Id,Pin,Desc,IsEligible}
不确定我是否完全理解了你的问题,我想你的意思是:
class Record
{
public int Id { get; set; }
public string Pin { get; set; }
public string Desc { get; set; }
public int IsEligible { get; set; }
}
var resultSet = new Dictionary<string, List<Record>>();
resultSet.Add("VA305", new List<Record>
{
new Record { Id = 1, Pin = "A1", Desc = "XYZ", IsEligible = 0 },
new Record { Id = 2, Pin = "A2", Desc = "ABC", IsEligible = 1 },
});
resultSet.Add("VA310", new List<Record>
{
new Record { Id = 1, Pin = "A1", Desc = "XYZ", IsEligible = 1 },
new Record { Id = 2, Pin = "A2", Desc = "ABC", IsEligible = 0 },
});
如果需要,可以添加更合适的数据类型
为了填充它,我建议遍历字典
- 首先展平列表字典,使值中的每个条目生成一项,这可以使用Linq
SelectMany轻松完成
- 然后按Id分组,这样每个Id得到一个结果项(我假设Id是唯一的标识,并且对于具有相同Id的所有项,Pin和Desc都是相同的)
这导致:
foreach (var result in resultSet.SelectMany(r => r.Value, (r, v) => new { Eff = r.Key, Rec = v })
.GroupBy(r => r.Rec.Id))
{
var row = dt.NewRow();
row["Id"] = result.Key;
row["Pin"] = result.First().Rec.Pin;
row["Desc"] = result.First().Rec.Desc;
foreach (var e in result)
{
row["IsEligible-" + e.Eff] = e.Rec.IsEligible;
}
dt.Rows.Add(row);
}
我不明白你第一个表中的值。这个列表到底是什么?它也是一个数据表吗?如果您显示一些填充Dictionary.resultSet.Add(eff,spResult.ToList());,可能会更清楚,这是我的密码。它添加一个字符串作为键,它是VA305,它添加一个列表作为值,它的类型是{Id,Pin,Desc,IsEligible}。非常感谢您的解决方案,它确实帮助了我完成任务。祝你永远幸福。
foreach (var result in resultSet.SelectMany(r => r.Value, (r, v) => new { Eff = r.Key, Rec = v })
.GroupBy(r => r.Rec.Id))
{
var row = dt.NewRow();
row["Id"] = result.Key;
row["Pin"] = result.First().Rec.Pin;
row["Desc"] = result.First().Rec.Desc;
foreach (var e in result)
{
row["IsEligible-" + e.Eff] = e.Rec.IsEligible;
}
dt.Rows.Add(row);
}