web-dev-qa-db-ja.com

特定の条件を満たすデータテーブル内の行数を取得する

データテーブルdtFooがあり、特定の条件を満たす行の数を取得したい。

編集:このデータはデータベースに保存されないため、SQLの使用はオプションではありません。

過去には、これを達成するために次の2つの方法を使用しました。

方法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());

私の店はいくつかのことを標準化しようとしていますが、これは出てきた1つの問題です。私は、これらの方法のどれがパフォーマンスの点で最良であるのか(そしてなぜ!)、そして最も一般的に使用されているのか疑問に思っています。

また、望ましい結果を達成するためのより良い方法はありますか?

35
Sesame

これを実現する簡単な方法の1つは、元の投稿に投稿されたものを1つのステートメントに結合することです。

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

これを実現する別の方法は、Linqメソッドを使用することです。

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

これには、System.Linq

59
saluce
int numberOfRecords = DTb.Rows.Count;
int numberOfColumns = DTb.Columns.Count;
8
user7159980
int numberOfRecords = 0;

numberOfRecords = dtFoo.Select().Length;

MessageBox.Show(numberOfRecords.ToString());
3
user_SS

これが速いかどうかはわかりませんが、少なくとも短いです:)

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

これを試して

int numberOfRecords = dtFoo.Select("IsActive = 'Y'").Count<DataRow>();    
Console.WriteLine("Count: " + numberOfRecords.ToString());
1
object count =dtFoo.Compute("count(IsActive)", "IsActive='Y'");
0
Zohaib Iqbal
int row_count = dt.Rows.Count;
0
Javed Alam

データがデータベースに保存されている場合、すべてのデータを取得してメモリでクエリを実行するよりも、データベースにクエリを送信する方が高速です。

3つ目の方法はデータセットへのlinqですが、これら3つの方法のいずれもパフォーマンスが大きく異なるとは思いません。

0
Marcus