2012-11-21 39 views
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()); 
} 
+1

是的,它可以縮短。這是否回答你的問題? – dtb

+0

都能跟得上不是在所有 – MonsterMMORPG

+0

請不要暗示問題。 =) –

回答

4

我認爲可以。

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

謝謝,但給出錯誤:http://img5.imageshack.us/img5/744/errorj.png – MonsterMMORPG

+0

@MonsterMMORPG固定。 –

+0

工作很好:) – MonsterMMORPG

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

方式都不能正常工作 – MonsterMMORPG

+0

我認爲你有投行項目,否則LINQ運營商將不會點亮。 –

+0

@ DanielA.White:謝謝。 –

0

另一種方式實現它在一條線。

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

。 –