如何将此循环写为单行?

时间:2012-11-21 14:35:04

标签: c# linq c#-4.0 for-loop dataset

我不知道这是否可能,但让我问你。如何使用例如LINQ?

以更短的方式编写以下循环
DataSet dsAllMonsters 
List<string> lstAllMonsters

for (int i = 0; i < dsAllMonsters.Tables[0].Rows.Count; i++)
{
    lstAllMonsters.Add(dsAllMonsters.Tables[0].Rows[i]["pokemonId"].ToString());
}

3 个答案:

答案 0 :(得分:4)

我认为可以。

lstAllMonsters = dsAllMonsters.Tables[0].Rows
   .Cast<DataRow>()
   .Select(r => r["pokemonId"].ToString())
   .ToList();

答案 1 :(得分:4)

是的,它可以在一行中完成:

lstAllMonsters = dsAllMonsters.Tables[0].Rows.Cast<DataRow>().Select(row => row["pokemonId"].ToString()).ToList();

但有时两条线比一条线好。我想你会发现它更具可读性:

var rows = dsAllMonsters.Tables[0].Rows.Cast<DataRow>();
lstAllMonsters = rows.Select(row => row["pokemonId"].ToString()).ToList();

答案 2 :(得分:0)

另一种方法是在一条线上实现它。

dsAllMonsters.Tables[0].AsEnumerable().ToList().ForEach((DataRow a) => lstAllMonsters.Add(a["pokemonId"].ToString()));