在不循环 C# 的情况下查找数据表中的行数
本文关键字:数据表 查找 情况下 循环 | 更新日期: 2023-09-27 18:30:15
我目前有一段工作正常的代码,如下所示:
foreach (DataRow dr in dt.Rows)
{
if ((int)dr["StatusId"] == 1)
{
count += 1;
}
}
然后,我使用 count 作为新数组的长度创建一个数组,并通过相同的循环循环以填充数组。有没有办法我可以在不创建原始循环的情况下获取数据表中的行数,以便我可以清理我的代码?
如果您只是想要表中所有行的计数,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();