次のループがあると仮定します。foreachループの実行を制限するにはどうすればよいですか?
foreach (DataRow dr in table.rows)
{
...
}
どうやってn回以上実行されないようにしますか?
次のループがあると仮定します。foreachループの実行を制限するにはどうすればよいですか?
foreach (DataRow dr in table.rows)
{
...
}
どうやってn回以上実行されないようにしますか?
あなたはTake()
拡張メソッドを使用できるようになりますあなたがIEnumerable<DataRow>
にDataRowCollection
を変換するためにCast<DataRow>()
を呼び出す必要があり
using System.Linq;
...
...
...
foreach (DataRow dr in rows.Cast<DataRow>().Take(50)) { }
注意を試みることができます。
このコードを試しましたか? 'DataRowCollection'に直接利用可能な' Take'メソッドはありません。 –
@James - 編集を参照してください;-) –
オプション1:
var i = 0;
foreach (DataRow dr in rows)
{
i++;
if(i >= 50) break;
}
オプション2:わずか50行を返すにあなたの元のクエリを変更する、理想的にはforループ
for(int i = 0; i <= 50; i++) {
// This might actually crash if there are fewer than 50 rows
var row = rows[i];
}
を使用して実行しているカウンターを持っています。あなたが使いたい以上にフェッチする必要はありません。
これがオプションでない場合、他に良い選択肢があります。場合rows
に
がちょうどDataTable.Rows
から実際には、与えられたシンプルなTake
答えはLINQは一般的なものが必要なのに対してのみ、非ジェネリックIEnumerable
インタフェースを実装DataRowCollection
として機能しません。これを試してみてください
// Uses DataTableExtensions.AsEnumerable
foreach (DataRow dr in table.AsEnumerable().Take(50))
または
// Uses Enumerable.Cast
foreach (DataRow dr in rows.Cast<DataRow>().Take(50))
あなたは私に誤植を訂正することを躊躇させました;)意図的な2番目の例の最後にプラス記号がありましたか? –
@JamesJohnson:いいえ、今回は入力ミスです:) –
これは受け入れられた回答ではありませんか? – xpereta
:あなたのような何かをする必要があります
foreach (DataRow dr in table.Rows.Cast<DataRow>().Take(50))
{
//your logic
}
.Cast<DataRow>().Take(50)
LINQのアプローチは罰金ですが、これは本当にfor
ループのための簡単な問題であり、 :
for(int i = 0; i < Math.Min(50, rows.Count); ++i)
{
var row = rows[i];
}
新しいprogra最終的に 'Take(50)'のアプローチの1つに行っても、明示的なカウンタをループで実行する答えを確認してください。 –
@AnthonyPegram:学習している人のための非常に良い提案。 –