2014-10-14 3 views
4

У меня есть DataTable (Ado.Net) со столбцом «Статус». Этот столбец содержит значения (в каждой записи)Как использовать Not In datatable.select

[ 'Красный', 'Зеленый', 'Синий', 'Yellow', 'White', 'OtherColors']

Я хочу, чтобы выбрать все строки, значения статуса которых не красные, зеленые, синие

Какое выражение фильтра используется для выбора данных с моими предложенными критериями. Поэтому я хочу, для того чтобы достигнуть какой-то вещи, как мы использовали в запросе SQL (WHERE Статус NOT IN ('Красный', 'Зеленый', 'Синий')

NB: Этот проект работает под управлением .NET 2.0 я не могу использование LINQ

ответ

12

Я проверил, он работает по желанию:

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

В результате DataRow[] содержит только DataRows с OtherColors, Yellow и White.

Если вы могли бы использовать LINQ я бы предпочел, чтобы:

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

Предположив вашего DataTable является частью типизированного набора данных вы можете использовать Linq для наборов данных, из которого можно было что-то вроде:

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

Даже если у вас нет типизированного набора данных Linq для наборов данных ваш ответ. Вам нужно будет немного кастинга, но не сложно.

+1

Этот проект работает с .NET 2.0 я не могу использовать LINQ –

4

Без Linq вы можете использовать RowFilter в виде DataView, как этот

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(); 
} 
Смежные вопросы