Расписания: получать данные, используя SQL, LINQ или класс? - PullRequest
1 голос
/ 05 декабря 2008

Моя проблема в том, что я хочу, чтобы сетка была заполнена набором времени, потраченного на задачи. Необходимо, чтобы дни недели были наверху (желательно, чтобы они были фиксированными, т. Е. Sun, Mon ... Sat) и имена задач в левом столбце. Содержимое таблицы будет содержать отдельные часы, потраченные на этот день для выполнения этой задачи.

Каков наилучший подход для достижения этой цели? Первый вариант - попытаться поместить все это в операторы SQL в базе данных. Второй вариант - это набор запросов LINQ, которые извлекают необработанные данные из задач и TimeEntries и правильно их структурируют. Вариант третий - использовать LINQ и извлекать результаты в класс (или коллекцию), который затем привязывается к элементу управления (возможно, к сетке).

Как бы вы это сделали?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2008

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

выберите t.taskname, sum (случай, когда datepart (d, tt.taskdate) = 1, tt.taskhours) или 0 end) в качестве воскресенья, сумма (случай, когда datepart (d, tt.taskdate) = 2, t.taskhours) иначе 0 end) как понедельник из задачного т присоединиться к tasktime tt на t.taskid = tt.taskid где tt.taskdate> = @begindate и tt.taskdate <= @ enddate </p>

Предложение where важно, потому что вы, вероятно, хотите отображать только одну неделю (обычно текущую неделю) в вашей сетке. Это также предполагает, что вы правильно сохранили даты ваших начисленных часов как тип данных datetime. (если вы не исправили это сейчас - вы поблагодарите меня позже.) Переменные будут отправлены из пользовательского интерфейса некоторым способом. Я лично сделал бы это как сохраненный процесс. Я уехал со вторника по субботу для вас.

1 голос
/ 06 декабря 2008

Вы можете использовать LinqToSql для извлечения строк в память, а затем LinqToObjects для агрегирования этих строк в формат таблицы (это сводное агрегирование).

В этом сообщении показан сводный запрос linq. В вашем случае это будет работать достаточно хорошо, поскольку вы знаете столбцы, которые вы хотите создать во время разработки. Команда SQL для LINQ (поворот)

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


И поскольку я могу говорить здесь все, что захочу, я хотел бы прокомментировать технику HLGEM SUM (CASE). Я использовал это раньше в отчетах, где мне приходилось писать только на SQL. Это работает очень хорошо ... если вы хотите писать на SQL.

1 голос
/ 05 декабря 2008

Похоже, вы подразумеваете, что данные в настоящее время хранятся в базе данных. Оптимальное решение зависит от объема внутренней обработки данных и существующей инфраструктуры проекта.

Я бы либо использовал большой запрос SQL, чтобы собрать все данные вместе и связать ResultSet напрямую с Grid (практически без обработки или инфраструктуры), либо использовать LINQ для заполнения своего рода класса TimeSheetModel, используя существующие инфраструктура и возможность дальнейшей обработки.

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