web-dev-qa-db-ja.com

DataTableを列値でフィルタリングするにはどうすればよいですか?

DataTableについて質問があります。データベースからDataTableを取得し、これらの列の1つに1または0が含まれています。次に、その列の1の値が1の行のみを取得します。

列の名前はACTIVATEです。

これが私のDataTableです:

DataTable table = new DataTable(TABLE);

//How can I filter here so ACTIVATE == 1?

adapter.Fill(table);

connection.Open();

selectcommand.ExecuteReader();

return table;
6
Tarasov

SQL経由(推奨)

_SELECT * FROM dbo.Table WHERE ACTIVATE = 1
_

_Linq-To-Datatable_経由(メモリ内):

_DataTable tblFiltered = table.AsEnumerable()
                             .Where(r => r.Field<int>("ACTIVATE") == 1)
                             .CopyToDataTable();
_

まだ.NET2を使用している場合は、 _DataTable.Select_ を使用できます。

_DataRow[] filteredRows = table.Select("ACTIVATE = 1");
_

それとは別に、テーブルを埋めるためにselectcommand.ExecuteReader()は必要ありません。

_DataTable table = new Datatable();
using(var con = new SqlConnection(connectionString))
using(var cmd = new SqlCommand("SELECT * FROM dbo.Table WHERE ACTIVATE = 1", con))
using(var da = new SqlDataAdapter(cmd))
{
    da.Fill( table );
}
_
18
Tim Schmelter

次のように DataTable.Select を使用するだけです。

 foundRows = table.Select("ACTIVATE = '1'");

DataRowオブジェクトの配列を返します。

3
gideon
DataTable results = table.Select("ACTIVATE = 1").CopyToDataTable();

これで目的の結果が得られるはずです。基本的には、SQLのようにデータテーブルをクエリできます。

2
Ryan McDonough
return table;
DataTable results = table.Select("ACTIVATE = 1").CopyToDataTable();
1
Soner Gönül