Эффективно фильтруйте DataTable - PullRequest
1 голос
/ 22 декабря 2011

Какой самый эффективный способ фильтрации DataRows в DataTable?У меня есть список целых чисел, и я хочу получить все строки (и в итоге создать из них DataTable), которые соответствуют целым числам в списке.В настоящее время я использую код ниже, но это довольно медленно.Я скучаю по более эффективному способу?

foreach (var i in integerlist)
{
     DataRow dr = (from row in originalDataTable.AsEnumerable()
                   where row.Field<int>("urlID") == i
                   select row).FirstOrDefault<DataRow>();

     if (dr!= null)
     {
          newDataTable.Rows.Add(dr);
     }
}

Ответы [ 4 ]

3 голосов
/ 22 декабря 2011

Я предлагаю вам попробовать сделать наоборот.

foreach (var row in originalDataTable)
{

    if(integerList.Contains( (int)row["urlID"]))
       newDataTable.ImportRow(row)
}

Это имеет еще больший смысл, если у вас больше строк в наборе данных, чем целых чисел в вашей коллекции int.Надеюсь, это поможет:)

1 голос
/ 22 декабря 2011

вы можете попробовать сделать соединение, например:

var resultSet = 
from row in originalDataTable.AsEnumerable()
join i in integerlist
on row.Field<int>("urlID") equals i
select row;

, который должен дать вам полный набор результатов. если вам нужен набор данных, вы можете сделать:

resultSet.CopyToDataTable ();

1 голос
/ 22 декабря 2011

Хм ... может быть, я что-то упустил, но ...

Не будет ли проще, просто используйте DataView и примените RowFilter за это?

0 голосов
/ 22 декабря 2011

Поскольку @Tigran говорит, что вы можете использовать dataview, проверьте эту статью MSDN о том, как это сделать.

Обычно вы используете DataView для фильтрации данных и вызываете метод DataView.ToTable для получения новой таблицы данных.

...