Проверка того, что DataTable отсортирован - PullRequest
3 голосов
/ 25 января 2011

Я работаю над созданием пользовательского условия проверки базы данных в Visual Studio и пытаюсь проверить порядок сортировки.

У меня нет проблем с проверкой того, что строки в DataTable действительно отсортированы, но я также хочу убедиться, что в каждом столбце сортировки есть хотя бы одна группировка с более чем одним отдельным значением.

IЯ веду список целых чисел, которые определяют отсортированные столбцы (отрицательные целые числа указывают на нисходящий порядок сортировки - и абсолютное значение целого числа - номер столбца).

Позвольте уточнить.

Я пишу условие модульного теста, который проверяет отсортированный DataTable.Я могу проверить, что строка находится в правильном порядке сортировки, но я хочу убедиться, что результирующий набор содержит данные, которые фактически проверяют сортировку.Другими словами, результирующий набор только с одной строкой или любым количеством повторяющихся строк действительно сортируется, но это на самом деле не проверяет сортировку.

Мне нужно убедиться, что каждый уровень сортировки содержит по крайней мередва разных значения хотя бы в одной группе.

В прошлом я использовал комбинацию кода SQL и .Net и использовал следующий набор запросов, чтобы убедиться, что данных достаточно для проверки сортировки.

SELECT TOP 1 COUNT(DISTINCT column1) 
FROM table 
HAVING COUNT(DISTINCT column1) > 1

SELECT TOP 1 column1, COUNT(DISTINCT column2) 
FROM table 
GROUP BY column1 
HAVING COUNT(DISTINCT column2) > 1

SELECT TOP 1 column1, column2, COUNT(DISTINCT column3)
FROM table
GROUP BY column1, column2
HAVING COUNT(DISTINCT column3) > 1

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

Мой реальный вопрос - как мне продублировать / преобразоватьприведенный выше код SQL для LINQ?

Ответы [ 2 ]

0 голосов
/ 26 января 2011

Вы можете сэкономить на затратах на необходимую итерацию, подключив события DataTable TableNewRow, RowChanging и RowChanged, чтобы отслеживать / принудительно отслеживать последовательность DataTable так, как вы ожидаете.

В противном случае это грубая сила:

foreach ( int i = 1 ; i < dt.Rows.Length ; ++i )
{
  DataRow prev = dt.Rows[i-1] ;
  DataRow curr = dt.Rows[i  ] ;

  Assert( CompareRows(prev,curr) <= 0 ) ;

}

Где CompareRows(prev,curr) возвращает обычный результат сравнения: -1 для prev curr);

0 голосов
/ 25 января 2011

Полагаю, вы проверяете, что он отсортирован с помощью двойного цикла вдоль строк

for (int i = 1; i < rowCount; i++) {
    for (int j = 0; j < sortColCount; j++) {
        int col = colNum(sortCols[j]);
        int d = Compare(GetValue(rows[i], col), GetValue(rows[i-1], col));
        if (d == 0) continue;
        // Insert here
        Assert(d == colDir(sortCols[j]));
    }
}
Что вам нужно сделать, это то, куда я положил комментарий, вставьте команду, чтобы пометить столбец сортировки d как протестированный (используя, например, массив bool).Затем после цикла утверждают, что каждый столбец сортировки проверяется.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...