Фильтровать DataTable, используя ArrayList - PullRequest
1 голос
/ 10 февраля 2012

У меня есть список массивов уникальных идентификаторов

ex 1,2,3,4....

и DataTable с записями с вышеуказанными идентификаторами

ID    Name
1     abc
2     xxx
3     aaa
4     bbb
5     eee
6     fff

мне нужно отфильтровать таблицу данных согласно списку массивовcontent

ex: if array list contain 1,2

, тогда DataTable должен быть отфильтрован только для того, чтобы содержать эти две записи. Есть ли какая-либо опция в DataTable, которую я мог бы сделать, кроме запуска DataTable внутри цикла For и получения каждого DataRow?

1 Ответ

3 голосов
/ 10 февраля 2012

Вы можете использовать Linq для фильтрации и, возможно, создать новый DataTable.

var filtered = 
    table.AsEnumerable()
        .Where(r => list.Contains(r.Field<int>("ID")))
        .CopyToDataTable();

Учитывая список, содержащий {1, 2}, отфильтрованная таблица будет содержать строки {{1, "abc"}, {2, "xxx"}}

Сторонапримечание: хотя вы можете использовать ArrayLists, предпочтительнее использовать общий аналог System.Collections.Generic.List<T> в новом коде, написанном на .NET.Обобщения были представлены как часть .NET 2.0 / C # 2.0 / VB 8 / Visual Studio 2005. На рынке представлены следующие выпуски .NET 4.0 / C # 4.0 / VB 10 / Visual Studio 2010. ArrayLists фактически устарели, за исключением случая споддержка кода, созданного в более ранних версиях языка и инфраструктуры.

Кроме того, если список особенно велик, возможно, стоит сначала загрузить его в HashSet<T> перед запросом, поскольку он будет более производительнымпри использовании метода Contains.


Полная демонстрация рабочего кода:

var table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "abc");
table.Rows.Add(2, "xxx");
table.Rows.Add(3, "aaa");
table.Rows.Add(4, "bbb");
table.Rows.Add(5, "eee");
table.Rows.Add(6, "fff");

// var list = new ArrayList(); // do not prefer
var list = new List<int>();
list.Add(1);
list.Add(2);

var filtered =
    table.AsEnumerable()
        .Where(r => list.Contains(r.Field<int>("ID")))
        .CopyToDataTable();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...