Между / Timerange LINQ - PullRequest
       2

Между / Timerange LINQ

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

Я пытаюсь поймать заказы между двумя датами.

Там есть:

Начало (DateTime) и Часы (Duration, TimeSpan) ..

У меня естьgoogled и обнаружил, что некоторые другие имеют эти проблемы, потому что LINQ не очень хорошо переводит в T-SQL ..

Это мой LINQ Query и переведенный T-SQL: http://pastebin.com/sLrpWLma

Я видел, что кто-то здесь создал какой-то метод расширения, который должен работать, но я не уверен, где разместить этот метод и какие модификаторы использовать, чтобы он был доступен в моем запросе? LINQ между оператором

1 Ответ

0 голосов
/ 06 декабря 2010

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

Я бы обратился на уровне таблицы, например, с постоянным вычисляемым столбцом:

create table Booking (
    Start datetime,
    DurationMinutes int,
    [End] AS (DATEADD(minute,(DurationMinutes),Start)) PERSISTED
)

Теперь вы можете просто запросить:

where b.Start >= someTime and b.End < someTime

(в качестве примера) - который должен очень четко отображаться в TSQL.

Поскольку это вычисляемый столбец, вы никогда не сможете получитьнесовместимое значение End;и поскольку он помечен как PERSISTED, ему не нужно выполнять вычисления для каждой строки (если вы не запутались в опциях SET ...).Вы можете даже индексировать PERSISTED столбцы, если хотите.

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