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

时间:2011-03-09 22:18:25

标签: c# datatable count criteria

我有一个数据表,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());

我的商店正在尝试标准化一些事情,这是一个问题。我想知道哪种方法在性能方面最好(以及为什么!),以及哪种方法最常用。

此外,有没有更好的方法来达到预期的效果?

8 个答案:

答案 0 :(得分:55)

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

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

实现此目的的另一种方法是使用Linq方法:

int numberOfRecords = dtFoo.AsEnumerable().Where(x => x["IsActive"].ToString() == "Y").ToList().Count;

请注意,这需要包括System.Linq

答案 1 :(得分:8)

int numberOfRecords = DTb.Rows.Count;
int numberOfColumns = DTb.Columns.Count;

答案 2 :(得分:3)

int numberOfRecords = 0;

numberOfRecords = dtFoo.Select().Length;

MessageBox.Show(numberOfRecords.ToString());

答案 3 :(得分:2)

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

int rows = new DataView(dtFoo, "IsActive = 'Y'", "IsActive",
    DataViewRowState.CurrentRows).Table.Rows.Count;

答案 4 :(得分:1)

试试这个

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

答案 5 :(得分:0)

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

第三种方法是数据集,但我怀疑这3种方法中的任何一种方法在性能上都有很大不同。

答案 6 :(得分:0)

object count =dtFoo.Compute("count(IsActive)", "IsActive='Y'");

答案 7 :(得分:0)

int row_count = dt.Rows.Count;