3

行が 1 つしかないテーブルを持つレガシーを更新しています。それをIListに変換したい。アイデアは、IFoo の最初のプロパティは Name であり、これは Table からの列名であり、2 番目の if Value は列の値です。

/// <summary>
/// Name = Column Name
/// </summary>
String Name { get; set; }
/// <summary>
/// Value = Column Value
/// </summary>
String Value { get; set; }

データはこのように見えるかもしれません

Foo1     Foo2     Foo3    Foo4     Foo5

xyz      zyx      abc     def      ghi 

そして、次のようになります。

Foo1, xyz

Foo2, zyx

Foo3, abc

Foo4, def

Foo5, ghi

これを達成する方法がよくわかりません。それを行うためのlinqクエリがあるようです。どんな助けでも大歓迎です。

ロンダ

4

2 に答える 2

0

古典的なSQL 列から行へのタスクのように見えます。このクエリを複数の行に使用できるように、列 ID を追加しました。

var dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Foo1");
dt.Columns.Add("Foo2");
dt.Rows.Add(1, "xyz", "abc");
dt.Rows.Add(2, "cds", "tgf");

var q = from row in dt.Rows.Cast<DataRow>()
        from col in dt.Columns.Cast<DataColumn>()
        select new {
            ID = row["ID"],
            Name = col.ColumnName,
            Value = row.IsNull(col) ? null : row[col]
        };
q.ToList()

ID, Name, Value
1   Foo1  xyz
1   Foo2  abc
2   Foo1  cds
2   Foo2  tgf

または、辞書を作成する場合

q.ToDictionary(x => new { x.ID, x.Name}, x => x.Value)
于 2013-08-09T05:34:22.733 に答える