Мне нужно решить очень очень простую проблему с фильтрами, но я новичок в использовании 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);
}
}
Заранее спасибо!