在不循环 C# 的情况下查找数据表中的行数

本文关键字:数据表 查找 情况下 循环 | 更新日期: 2023-09-27 18:30:15

我目前有一段工作正常的代码,如下所示:

 foreach (DataRow dr in dt.Rows)
            {
                if ((int)dr["StatusId"] == 1)
                {
                  count += 1;
                }
            }

然后,我使用 count 作为新数组的长度创建一个数组,并通过相同的循环循环以填充数组。有没有办法我可以在不创建原始循环的情况下获取数据表中的行数,以便我可以清理我的代码?

在不循环 C# 的情况下查找数据表中的行数

如果您只是想要表中所有行的计数,dt.Rows.Count就可以了。

但是,如果您需要询问 StatusId 的值并且仅在StatusId == 1时计算行,那么您将需要以某种方式循环行。您可以使用 Linq 执行此操作,并避免手动编写循环:

var count = dt.AsEnumerable().Count(r => r.Field<int>("StatusId") == 1);

您可以使用 linq 功能来执行此操作。在您的示例中,我注意到您尝试将"StatusId"列与条件进行计数。要计算特定条件,您可以使用以下方法。

DataTable myDataTable = new DataTable();
int countOfCondition = myDataTable.AsEnumerable().Where(x => x.Field<int>("StatusId") == 1).Count();

> 这里作为答案@erikscandola:if显然要省略,你不需要计数......

  Rows.Count

如果你想要 StatusId = 1 的行数,你可以使用 Linq:

public void Test()
{
    DataTable dt = new DataTable();
    int count = (from DataRow dr
                in dt.Rows
                 where (int)dr["StatusId"] == 1
                 select dr
                ).Count();
    //on one line
    int count = (from DataRow dr in dt.Rows where (int)dr["StatusId"] == 1 select dr).Count();
}

所以...如果我正确阅读了您的问题,那么您不是在寻找计算行数的方法,而是在寻找一种方法来获取与您的标准匹配的行数组?

试试这个:

DataRow[] result = dt.Select("StatusId = 1");

该方法Select选择与标准匹配的所有行,并返回所选行的数组。

另请参阅:https://msdn.microsoft.com/en-us/library/det4aw50(v=vs.110).aspx

行。长度或行。计数应该有效。

您需要

使用AsEnumerable扩展,然后使用where仅获取StatusId等于1的行。在此之后,使用 Count 获取结果数。

dt.AsEnumerable().Where(dr => (int)dr["StatusId"] == 1).Count();