在不循环C#

时间:2016-01-14 13:38:45

标签: c# asp.net arrays datatable

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

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

                }

            }
然后我创建一个数组,使用count作为我的新数组的长度,并循环回一个相同的循环来填充数组。有没有办法可以做一些事情来获取数据表中的行数而不创建原始循环所以我可以清理一些代码?

7 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

这里的答案是@erikscandola:if显然是要省略的,你不需要数......

  Rows.Count

答案 2 :(得分:2)

如果你想要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();
}

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

rows.Length或rows.Count应该可以工作。

答案 5 :(得分:1)

Soo ...如果我正确地阅读了您的问题,您不是在寻找计算行数的方法,但是您正在寻找一种方法来获得与您的标准相匹配的行数?

试试这个:

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

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

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

答案 6 :(得分:0)

您需要使用AsEnumerable exstension,然后使用where来仅获取StatusId等于1的行。在此之后使用Count来获取结果数。

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