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 个数据集数据行列。我怎样才能做到这一点 ?

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

这样,您将获得一个List<T>whereT是具有 3 个字符串属性的匿名对象,即Col1,Col2Col3. 我想这就是你所要求的。

于 2012-12-20T12:40:38.473 回答