C# 获取数据表中满足特定条件的行数

C# 获取数据表中满足特定条件的行数,c#,datatable,count,criteria,C#,Datatable,Count,Criteria,我有一个datatable,dtFoo,并希望获得满足特定条件的行数 编辑:此数据不存储在数据库中,因此不能使用SQL 在过去,我使用了以下两种方法来实现这一点: 方法1 int numberOfRecords = 0; DataRow[] rows; rows = dtFoo.Select("IsActive = 'Y'"); numberOfRecords = rows.Length; Console.WriteLine("Count: " + numberOfRecords.ToStr

我有一个datatable,dtFoo,并希望获得满足特定条件的行数


编辑:此数据不存储在数据库中,因此不能使用SQL

在过去,我使用了以下两种方法来实现这一点:

方法1

int numberOfRecords = 0;
DataRow[] rows;

rows = dtFoo.Select("IsActive = 'Y'");
numberOfRecords = rows.Length;

Console.WriteLine("Count: " + numberOfRecords.ToString());
方法2

int numberOfRecords = 0;

foreach (DataRow row in dtFoo.Rows)
{
    if (row["IsActive"].ToString() == "Y")
    {
        numberOfRecords++;
    }
}

Console.WriteLine("Count: " + numberOfRecords.ToString());
我的商店正在尝试在一些事情上实现标准化,这是一个出现的问题。我想知道这些方法中哪一种在性能方面最好(为什么!),以及哪一种最常用


此外,是否有更好的方法来实现所需的结果?

如果数据存储在数据库中,则将查询发送到数据库会更快,而不是获取所有数据并在内存中查询


第三种方法是linq到数据集,但我怀疑这三种方法在性能上是否有很大差异。

不确定这是否更快,但至少更短:)


实现这一点的一个简单方法是将原始帖子中发布的内容合并到一个语句中:

int numberOfRecords = dtFoo.Select("IsActive = 'Y'").Length;
实现这一点的另一种方法是使用Linq方法:

int numberOfRecords = dtFoo.AsEnumerable().Where(x => x["IsActive"].ToString() == "Y").ToList().Count;
注意这需要包括
系统。Linq

试试这个

int numberOfRecords = 0;

numberOfRecords = dtFoo.Select().Length;

MessageBox.Show(numberOfRecords.ToString());
int numberOfRecords = dtFoo.Select("IsActive = 'Y'").Count<DataRow>();    
Console.WriteLine("Count: " + numberOfRecords.ToString());
int numberOfRecords=dtFoo.Select(“IsActive='Y').Count();
WriteLine(“Count:+numberOfRecords.ToString());

此数据不存储在数据库中。我编辑了我的原始条目以反映这一点短于
introws=dtFoo.Select(“IsActive='Y')。长度?@PedroC88:不是;它比原始海报的方法短。非常好的解决方案,你能告诉我一些可以看到LINQ的例子的来源吗?@Saluce,dtFoo.AsEnumerable()。where(expr)不需要转换为可枚举,因为我们可以使用dtFoo。where(expr)也已经存在enumerable@Sunny_Sid这是不对的。您必须显式转换为
可枚举
才能使用
可枚举。其中
@Sesame已经描述了dtFoo。选择有问题的方法。此外,问题是根据某些标准计数,而不是检索记录总数。
object count =dtFoo.Compute("count(IsActive)", "IsActive='Y'");
int numberOfRecords = DTb.Rows.Count;
int numberOfColumns = DTb.Columns.Count;
int numberOfRecords = dtFoo.Select("IsActive = 'Y'").Count<DataRow>();    
Console.WriteLine("Count: " + numberOfRecords.ToString());
int row_count = dt.Rows.Count;