0

学生クラスがあります。

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();

したがって、グリッドにはディクショナリキーの列が表示され、すべての行にディクショナリ値が使用されます。どんな助けでも???

どうもありがとう。

4

1 に答える 1

1

あなたSelectManyは不要です - 各生徒のプロパティごとに1行ではなく、各生徒に1行を選択したいので、必要なものは次の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オブジェクトで厳密に型指定されたプロパティを使用し、ストアド プロシージャから適切に設定する方がはるかに優れています。nyou はここで匿名オブジェクトをまったく必要としません。

于 2012-08-07T07:57:00.800 に答える