web-dev-qa-db-ja.com

Not Indatatable.selectの使用方法

'Status'列のDataTable(Ado.Net)があります。この列は、(各レコードの)値を保持します

['赤'、 '緑'、 '青'、 '黄'、 '白'、 'その他の色']

ステータス値が赤、緑、青ではないすべての行を選択したい

提案した基準でデータを選択するために使用するフィルター式の種類。だから私はSQLクエリで使用したようなものを達成したい(WHERE Status NOT IN( 'Red'、 'Green'、 'Blue')

注意:このプロジェクトは.NET2.0を実行しています。linqを使用できません。

6
Binson Eldhose

私はそれをテストしました、それは望み通りに働きます:

DataRow[] filtered = tblStatus.Select("Status NOT IN ('Red','Green','Blue')");

結果として DataRow[]には、OtherColorsYellow、およびWhiteのDataRowのみが含まれます。

LINQを使用できる場合は、次のことをお勧めします。

string[] excludeStatus = {"Red","Green","Blue"};
var filteredRows = tblStatus.AsEnumerable()
    .Where(row => !excludeStatus.Contains(row.Field<string>("Status")));
16
Tim Schmelter

Linqがないと、次のようにDataViewのrowfilterを使用できます。

public DataTable GetFilteredData(DataTable table, string[] filterValues)
{
    var dv = new DataView(table);
    var filter = string.join("','", filterValues);
    dv.RowFilter = "Status NOT IN ('" + filter + "')";
    return dv.ToTable();
}
5
Ric .Net

データテーブルが型付きデータセットの一部であるとすると、Linqを使用してデータセットを作成できます。このデータセットから次のようになります。

var records = 
      from record in datatable
      where !record.Status.Contains('Red','Green','Blue')
      select record;

型付きデータセットがない場合でも、データセットへのLinqが答えです。キャストする必要がありますが、難しくはありません。

1
Ric .Net