Как фильтровать DataTable программно - PullRequest
1 голос
/ 27 апреля 2011

Мне нужно решить очень очень простую проблему с фильтрами, но я новичок в использовании DataTables, DataRows и так далее.Решение, которое я предложил, много пахнет.Я почти уверен, что это лучший способ реализовать его.

Вот простая объясненная проблема:

У меня есть две таблицы данных, называемые branch и changesets.Таблица данных с именем branch содержит все записи в системе, и мне нужно отфильтровать те ветви, на которые нет ссылок в записях набора изменений.Набор изменений ссылается на ветку в поле с именем FIDBRANCH.

Например.Предположим, таблица дат с 6 ветками и 3 наборами изменений.На ссылки ссылаются только ветви с идентификаторами 4 и 5.

BRANCHES  
1         
2         
3
4
5
6

CHANGESETS
references to branch 4
references to branch 5
references to branch 5

Результатом будет фильтрованный набор данных филиалов, имеющий только ветви 4 и 5.

Это мой плохой подход:

private void FilterUnusedBranches(DataTable branches, DataTable changesets)
{
        // index referenced branch ids
        ArrayList branchIds = new ArrayList();

        foreach (DataRow row in changesets.Rows)
        {
            long id = Convert.ToInt64(row["FIDBRANCH"]);
            branchIds.Add(id);
        }

        IList<DataRow> notNeededRows = new List<DataRow>();

        // get a list of non-referenced rows
        foreach (DataRow row in branches.Rows)
        {
            long id = Convert.ToInt64(row["BRID"]);

            if (!branchIds.Contains(id))
            {
                notNeededRows.Add(row);
            }
        }

        // remove not needed rows
        foreach (DataRow row in notNeededRows)
        {
            branches.Rows.Remove(row);
        }
}

Заранее спасибо!

1 Ответ

0 голосов
/ 27 апреля 2011

Вы хотите создать DataRelation между таблицами данных буксировки.

Это может помочь вам ... http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/f122d7f4-3b7d-4d93-bd0f-8bb57cd990a4

...