4

我不知道这是否可能,但让我问你。如何使用例如 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());
}
4

3 回答 3

4

我认为可以。

lstAllMonsters = dsAllMonsters.Tables[0].Rows
   .Cast<DataRow>()
   .Select(r => r["pokemonId"].ToString())
   .ToList();
于 2012-11-21T14:37:04.560 回答
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();
于 2012-11-21T14:37:20.630 回答
0

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

dsAllMonsters.Tables[0].AsEnumerable().ToList().ForEach((DataRow a) => lstAllMonsters.Add(a["pokemonId"].ToString()));
于 2012-11-21T15:02:06.627 回答