Zakładając mam następujące pętli:Jak ograniczyć pętlę foreach n działa?
foreach (DataRow dr in table.rows)
{
...
}
Jak mogę zapobiec jego działa częściej niż n razy?
Zakładając mam następujące pętli:Jak ograniczyć pętlę foreach n działa?
foreach (DataRow dr in table.rows)
{
...
}
Jak mogę zapobiec jego działa częściej niż n razy?
można spróbować
using System.Linq;
...
...
...
foreach (DataRow dr in rows.Cast<DataRow>().Take(50)) { }
Zauważ, że musisz zadzwonić Cast<DataRow>()
w celu przekształcenia DataRowCollection
do IEnumerable<DataRow>
, który pozwoli Ci korzystać z metody Take()
przedłużacza.
Czy próbowałeś tego kodu? Nie ma metody "Take" dostępnej bezpośrednio dla 'DataRowCollection'. –
@James - patrz edycja ;-) –
Wariant 1: Czy licznik pracuje:
var i = 0;
foreach (DataRow dr in rows)
{
i++;
if(i >= 50) break;
}
Opcja 2: Użyj do pętli
for(int i = 0; i <= 50; i++) {
// This might actually crash if there are fewer than 50 rows
var row = rows[i];
}
Idealnie, modyfikować swój pierwotny zapytanie do powrotu tylko 50 wierszy. Nie ma sensu przynosić więcej, niż chcesz wykorzystać.
Inne dostarczyły dobre alternatywy, jeśli nie jest to możliwe.
W przypadku rows
jest właściwie tylko od DataTable.Rows
, proste Take
odpowiedzi udzielone nie będzie działać jako DataRowCollection
realizuje tylko nierodzajową IEnumerable
interfejs, podczas gdy LINQ potrzebuje rodzajowe jeden. Musisz coś takiego:
// Uses DataTableExtensions.AsEnumerable
foreach (DataRow dr in table.AsEnumerable().Take(50))
lub
// Uses Enumerable.Cast
foreach (DataRow dr in rows.Cast<DataRow>().Take(50))
Zmusiłeś mnie do korekty literówek;) Czy znak plusa na końcu drugiego przykładu był celowy? –
@JamesJohnson: Nie, tylko literówka tym razem :) –
Czy nie powinna to być akceptowana odpowiedź? – xpereta
Spróbuj tego:
foreach (DataRow dr in table.Rows.Cast<DataRow>().Take(50))
{
//your logic
}
W .Cast<DataRow>().Take(50)
Linq podejścia są w porządku, ale jest to naprawdę proste problemu dla for
pętli :
for(int i = 0; i < Math.Min(50, rows.Count); ++i)
{
var row = rows[i];
}
Dla nowych programów Mian, spójrz na odpowiedzi, które czynią jawne liczniki w pętlach, nawet jeśli ostatecznie wybierzesz jedną z metod podejścia "Podejmij (50)". –
@AnthonyPegram: Bardzo dobra sugestia dla kogoś, kto się uczy. –