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

Ses*_*ame 38 c# datatable criteria count

我有一个数据表,dtFoo,并希望得到满足一定条件的行数.

编辑:此数据不存储在数据库中,因此使用SQL不是一个选项.

在过去,我使用以下两种方法来完成此任务:

方法1

int numberOfRecords = 0;
DataRow[] rows;

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

Console.WriteLine("Count: " + numberOfRecords.ToString());
Run Code Online (Sandbox Code Playgroud)

方法2

int numberOfRecords = 0;

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

Console.WriteLine("Count: " + numberOfRecords.ToString());
Run Code Online (Sandbox Code Playgroud)

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

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

sal*_*uce 65

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

int numberOfRecords = dtFoo.Select("IsActive = 'Y'").Length;
Run Code Online (Sandbox Code Playgroud)

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

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

注意这需要包括System.Linq.

  • @Sunny_Sid这是不正确的。您必须显式转换为`Enumerable`才能使用`Enumerable.Where`。 (2认同)

小智 7

int numberOfRecords = DTb.Rows.Count;
int numberOfColumns = DTb.Columns.Count;
Run Code Online (Sandbox Code Playgroud)