如何限制foreach循环n运行?

时间:2011-10-10 17:26:53

标签: c# datatable

假设我有以下循环:

foreach (DataRow dr in table.rows)
{
    ...
}

如何让它比n次运行更频繁?

6 个答案:

答案 0 :(得分:18)

如果rows实际上仅来自DataTable.Rows,则提供的简单Take答案将无效,因为DataRowCollection仅实现非通用IEnumerable接口,而LINQ需要通用接口。你需要这样的东西:

// Uses DataTableExtensions.AsEnumerable
foreach (DataRow dr in table.AsEnumerable().Take(50))

// Uses Enumerable.Cast
foreach (DataRow dr in rows.Cast<DataRow>().Take(50))

答案 1 :(得分:9)

你可以尝试

using System.Linq;
...
...
...
foreach (DataRow dr in rows.Cast<DataRow>().Take(50)) { }

请注意,您必须致电Cast<DataRow>()才能将DataRowCollection转换为IEnumerable<DataRow>,这样您就可以使用Take()扩展程序。

答案 2 :(得分:3)

选项1:有一个正在运行的计数器:

var i = 0;
foreach (DataRow dr in rows)
{
    i++;
    if(i >= 50) break;
}

选项2:使用for-loop

for(int i = 0; i <= 50; i++) {
    // This might actually crash if there are fewer than 50 rows
    var row = rows[i]; 
}

答案 3 :(得分:3)

理想情况下,将原始查询修改为仅返回50行。获取超过您想要使用的内容毫无意义。

如果不是一种选择,其他人提供了很好的选择。

答案 4 :(得分:1)

试试这个:

foreach (DataRow dr in table.Rows.Cast<DataRow>().Take(50))
{
    //your logic
}

答案 5 :(得分:0)

.Cast<DataRow>().Take(50) Linq方法很好,但这对于for循环来说确实是一个简单的问题:

for( int i = 0; i < Math.Min(50, rows.Count); ++i ) 
{ 
    var row = rows[i];
}