1

アプリにループがあります。コードは次のとおりです:-

foreach (DataRow dr in dt.Rows)
    ColorNames +=dr["ColorName"].ToString() + "\n";

\nしかし、最後に追加したくありませんDatarow。それを行う方法について何か提案はありますか?

4

4 に答える 4

8
ColorNames = String.Join("\n", dt.Rows.Select(dr => dr["ColorName"].ToString()));

更新されたバージョンは次のとおりです(必要なEnumerableへのキャストを忘れました):

ColorNames = String.Join("\n", dt.AsEnumerable().Select(dr => dr.Field<string>("ColorName")));
于 2012-05-10T11:00:56.993 に答える
2

Foreachはインデックスでは機能しません。

オプション1:ForEachループ

foreachループを使用します。最後までループし、外側のループは好きです

ColorNames.Substring(0, ColorNames.Length-1);

オプション2:Forループ

forループを使用し、最後まですべてのインデックスのループ内のインデックスを確認します。\ nを追加し、最後のインデックスには\nを追加しない

for (int i = 0; i < dt.Rows.Count; i++)
{
   ColorNames += i < dt.Rows.Count-1 
           ? dr["ColorName"].ToString() + "\n"
           : dr["ColorName"].ToString();
}

また

for (int i = 0; i < dt.Rows.Count; i++)
   ColorNames += dr["ColorName"].ToString() + (i < dt.Rows.Count-1 ?  "\n": "");

オプション3:LINQ

ColorNames = String.Join("\n", dt.Rows.Select(dr => dr["ColorName"].ToString()));
于 2012-05-10T10:59:29.863 に答える
0
var colorNamesList = dt.Rows
  .Cast<DataRow>()
  .Select(dr => dr["ColorName"].ToString())
  .ToArray();

var colorNames = String.Join("\n", colorNames);
于 2012-05-10T11:02:56.043 に答える
0
int count = 0;
foreach (DataRow dr in dt.Rows)
{
    count++;
    ColorNames +=dr["ColorName"].ToString();
    if (count < dt.Rows.Count)
        ColorNames += "\n";
}
于 2012-05-10T11:10:07.137 に答える