'Status'列のDataTable(Ado.Net)があります。この列は、(各レコードの)値を保持します
['赤'、 '緑'、 '青'、 '黄'、 '白'、 'その他の色']
ステータス値が赤、緑、青ではないすべての行を選択したい
提案した基準でデータを選択するために使用するフィルター式の種類。だから私はSQLクエリで使用したようなものを達成したい(WHERE Status NOT IN( 'Red'、 'Green'、 'Blue')
注意:このプロジェクトは.NET2.0を実行しています。linqを使用できません。
私はそれをテストしました、それは望み通りに働きます:
DataRow[] filtered = tblStatus.Select("Status NOT IN ('Red','Green','Blue')");
結果として DataRow[]
には、OtherColors
、Yellow
、およびWhite
のDataRowのみが含まれます。
LINQを使用できる場合は、次のことをお勧めします。
string[] excludeStatus = {"Red","Green","Blue"};
var filteredRows = tblStatus.AsEnumerable()
.Where(row => !excludeStatus.Contains(row.Field<string>("Status")));
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();
}
データテーブルが型付きデータセットの一部であるとすると、Linqを使用してデータセットを作成できます。このデータセットから次のようになります。
var records =
from record in datatable
where !record.Status.Contains('Red','Green','Blue')
select record;
型付きデータセットがない場合でも、データセットへのLinqが答えです。キャストする必要がありますが、難しくはありません。