Используя WDDCEDEEIWEB201, чтобы найти связанные метки времени из базы данных - PullRequest
0 голосов
/ 04 июня 2010

Мне нужно выполнить запрос LINQ, где я ищу несколько разных временных меток в БД:

var issues = 
    from i in ReadOnlyContext.Issues
    where i.TruckID == truckID && i.OutOfOrderStart < startDate && 
        i.OutOfOrderEnd > endDate ||
        i.TruckID == truckID && i.OutOfOrderStart > startDate && 
        i.OutOfOrderEnd < endDate ||
        i.TruckID == truckID && i.OutOfOrderStart < startDate && 
        i.OutOfOrderStart < endDate ||
        i.TruckID == truckID && i.OutOfOrderStart > startDate && 
        i.OutOfOrderEnd > endDate
    select i;

Моя проблема в том, что я хотел бы отфильтровать запрос, чтобы он возвращал только записи, где OutOfOrderStart и OutOfOurderEnd находятся в одной строке. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 04 июня 2010

Привет и спасибо за ответ:)

Я не проверял, были ли включены OutOfOrderEnd или Start тоже ... Но я могу быть намного проще:

var issues = 
    from i in ReadOnlyContext.Issues
    let startInside = (startDate < i.OutOfOrderStart && i.OutOfOrderStart < endDate)
    let endInside = (startDate < i.OutOfOrderEnd && i.OutOfOrderStart < endDate)
    let allOutside = (startDate > i.OutOfOrderEnd && endDate < i.OutOfOrderEnd)
    where i.TruckID == truckID && (startInside || endInside || allOutside)
select i;
0 голосов
/ 04 июня 2010

Все эти сравнения - сравнения в одной строке. В вашем заявлении говорится, что нужно найти каждую строку, i, так, чтобы TruckID i-й строки был равен TruckID (обратите внимание, что вам не нужно повторять этот тест в каждом подусловии), и даты начала / окончания которого совпадают с из подусловий. Если вы не получаете ожидаемые данные, то я предполагаю, что ваши условия не соответствуют вашим требованиям.

Используя закон распределения, вы можете переписать его как:

var issues = 
    from i in ReadOnlyContext.Issues
    where i.TruckID == truckID &&
        (i.OutOfOrderStart < startDate && i.OutOfOrderEnd > endDate
        || i.OutOfOrderStart > startDate && i.OutOfOrderEnd < endDate
        || i.OutOfOrderStart < startDate && i.OutOfOrderStart < endDate
        || i.OutOfOrderStart > startDate && i.OutOfOrderEnd > endDate)
    select i;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...