C# 将字典数据转换为数据表

C# 将字典数据转换为数据表,c#,C#,在C#中将字典转换为数据表时,我遇到了一个问题 我在字典中的值为Dict Eg值- (Key) - , (Value) - Id Pin Desc IsEligible- 1 A1 XYZ 0 2 A2 ABC 1 (Key) - , (Value) -

在C#中将
字典
转换为
数据表
时,我遇到了一个问题

我在
字典中的值为
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);
}