使用 LINQ 从字典中获取所有值,以列出匿名类型

本文关键字:类型 LINQ 字典 获取 使用 | 更新日期: 2024-11-09 01:03:40

我有一个学生班。

class student : DynamicObject
    {
          public Dictionary<string, object> dics = new Dictionary<string, object>();
    }

在我动态地向此类添加属性。在我填充了一个

list<student> lists, 

我如何使用linq检索每个学生类中字典中的键和值。这样我就可以将其绑定到数据网格。每个学生对象中的所有字典的键都是相同的,因为这将是列名。列值的值会有所不同。这样我就可以将此匿名类型绑定到数据网格。我尝试了以下方法。但结果是不正确的。

  var result = lists.SelectMany(x => x.Dictionary.Keys).Select(m => new
                {
                    StudentID = m[1],
                    RegNo = m[2],
                    JoinYear = m[3]
                }).ToList();

终于可以这样绑定了,

 grid.DataSource = result;
 grid.DataBind();

因此,网格将显示字典键中的列,并且所有行都将使用字典值填充。任何帮助???

非常感谢。

使用 LINQ 从字典中获取所有值,以列出匿名类型

您的SelectMany是不必要的 - 您希望为每个学生选择一行,而不是为每个学生的每个属性选择一行,因此您只需要一个Select

var result = lists.Select(m => new
    {
        StudentID = m.Dict["StudentID"],
        RegNo = m.Dict["RegNo"],
        JoinYear = m.Dict["JoinYear"]
    }); // no need for ToList if you're just binding.

当然,在 IMO 上,最好在 Student 对象上使用强类型属性并从存储过程中正确填充它们;这里根本不需要匿名对象。