Выберите активные и недавно выполненные «задачи» из таблицы - PullRequest
0 голосов
/ 05 февраля 2011

У меня есть таблица задач что-то вроде;

    PK  TaskId
        TaskName
        Notes
        ...
        ...
    FK  StatusId
        DateCompleted

Я хочу получить список активных задач плюс любых задач, выполненных за последние 7 дней.

На данный момент у меня есть;

var then = DateTime.Today.AddDays(-7);
return _db.Tasks
    .Where(t => (t.StatusId != 1))
    .Union(_db.Tasks
    .Where(t => (t.DateCompleted >= then))
    );

Это самый разумный способ сделать это? Я создаю БД с нуля, чтобы ее можно было изменить в соответствии с лучшим методом:)

Приветствие Si

Ответы [ 2 ]

0 голосов
/ 05 февраля 2011

Другая альтернатива:

var day = DateTime.Today.AddDays(-7);
return _db.Tasks
    .Where(t => t.StatusId != 1 || t.DateCompleted >= day);

Это более кратко, но может использовать только один индекс (StatusId или DateCompleted).Ваша техника Union может позволять использовать оба индекса, но имеет шанс наложения.

Для улучшения вашего решения вы можете использовать Concat() вместо Union(), что не устраняет дубликаты, если вы уверены, что естьне будет совпадения между двумя наборами.Concat() превратится в UNION ALL, что быстрее UNION.

0 голосов
/ 05 февраля 2011

С самой базой данных все в порядке, но не могли бы вы просто использовать «или» в запросе?

_db.Tasks.Where(t => t.StatusId != -1 || t.DateCompleted >= then)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...