Получение количества строк в таблице данных, которые соответствуют определенным критериям - PullRequest
34 голосов
/ 10 марта 2011

У меня есть таблица данных 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 ]

56 голосов
/ 09 мая 2012

Один из простых способов сделать это - объединить то, что было опубликовано в исходном сообщении, в одно утверждение:

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

Еще один способ сделать это - использовать методы Linq:

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

Обратите внимание, это требует в том числе System.Linq.

8 голосов
/ 15 ноября 2016
int numberOfRecords = DTb.Rows.Count;
int numberOfColumns = DTb.Columns.Count;
3 голосов
/ 30 апреля 2014
int numberOfRecords = 0;

numberOfRecords = dtFoo.Select().Length;

MessageBox.Show(numberOfRecords.ToString());
2 голосов
/ 10 марта 2011

Не уверен, что это быстрее, но, по крайней мере, короче:)

int rows = new DataView(dtFoo, "IsActive = 'Y'", "IsActive",
    DataViewRowState.CurrentRows).Table.Rows.Count;
1 голос
/ 16 ноября 2016

Попробуйте это

int numberOfRecords = dtFoo.Select("IsActive = 'Y'").Count<DataRow>();    
Console.WriteLine("Count: " + numberOfRecords.ToString());
0 голосов
/ 01 ноября 2018
int row_count = dt.Rows.Count;
0 голосов
/ 23 июня 2014
object count =dtFoo.Compute("count(IsActive)", "IsActive='Y'");
0 голосов
/ 10 марта 2011

Если данные хранятся в базе данных, будет быстрее отправлять запрос в базу данных, а не получать все данные и запрашивать их в памяти.

Третий способ сделать это - установить соединение с наборами данных, но я сомневаюсь, что любой из этих трех методов сильно отличается по производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...