3

さて、これは以下で機能しています

     List<string> lstKnownMoves = dsAttacksTemp.Tables[0].Rows.
Cast<DataRow>().Select(r => r["Column1"].ToString()).ToList();

しかし、私はそれを以下のように機能させたいのですが、機能しません

     List<string> lstKnownMoves = dsAttacksTemp.Tables[0].Rows.
Cast<DataRow>().Select(r => r["Column1"].ToString(),r => r["Column2"].ToString(),r => r["Column3"].ToString()).ToList();

したがって、1 つのデータセット datarow 列の代わりに、複数の列をリストに追加したいと考えています。どうやってやるの ?

4

3 に答える 3

4

フィールドの内容をリストにダンプするだけの場合は、SlectManyを使用できます。

List<string> lstKnownMoves = dsAttacksTemp.Tables[0].Rows
 .Cast<DataRow>()
 .SelectMany(r => new string[]{
                    r["Column1"].ToString(),
                    r["Column2"].ToString(),
                    r["Column3"].ToString()})
 .ToList();

ただし、フィールドを別のオブジェクトに抽出したい場合は、次のようにすることができます。

class KnownMove {
   public string Column1 {get; set;}
   public string Column2 {get; set;}
   public string Column3 {get; set;}
}

List<KnownMove > lstKnownMoves = dsAttacksTemp.Tables[0].Rows
 .Cast<DataRow>()
 .SelectMany(r => new KnownMove{
                    Column1 = r["Column1"].ToString(),
                    Column2 = r["Column2"].ToString(),
                    Column3 = r["Column3"].ToString()})
 .ToList();
于 2012-12-20T12:42:47.000 に答える
1

各列に個別にアクセスできるようにしたい場合は、文字列の配列を返す必要があります。

 List<string[]> lstKnownMoves = dsAttacksTemp.Tables[0].Rows
                          .Cast<DataRow>().Select(r => new[] 
                               { 
                                  r["Column1"].ToString(),  
                                  r["Column2"].ToString(), 
                                  r["Column3"].ToString() 
                               }).ToList();

次に、各行について、インデックスによって列の文字列値を取得できます。

 foreach(var item in lstKnownMoves) 
      Console.WriteLine("Column1: {0} Column2: {1} Column3: {2}", item);

基本的に列のマップが必要で、選択した回答のようにタプルとして機能するクラスを作成したくない場合は、次を使用できますList<dynamic>

 List<dynamic> lstKnownMoves = dsAttacksTemp.Tables[0].Rows
                          .Cast<DataRow>().Select(r => new 
                               { 
                                  Column1 = r["Column1"].ToString(),  
                                  Column2 = r["Column2"].ToString(), 
                                  Column3 = r["Column3"].ToString() 
                               }).ToList<dynamic>();

 foreach(var item in lstKnownMoves) 
      Console.WriteLine("Column1: {0} Column2: {1} Column3: {2}", 
          item.Column1, item.Column2, item.Column3);
于 2012-12-20T12:39:40.343 に答える
1

文字列配列のリストではなく、いくつかの文字列プロパティを持つオブジェクトのリストが必要だと思います。

List<object> lstKnownMoves = dsAttacksTemp.Tables[0].Rows.
Cast<DataRow>().Select(r => new { 
 Col1 = r["Column1"].ToString(), 
 Col2 = r["Column2"].ToString(), 
 Col3 = r["Column3"].ToString()
}).ToList();

このようにして、 と という 3 つの文字列プロパティを持つ匿名オブジェクトであるwhereを取得List<T>します。これはあなたが求めているものだと思います。TCol1Col2Col3

于 2012-12-20T12:40:38.473 に答える