Конвертировать SQL - LINQ - Проблема с использованием обоих Мин / Макс - PullRequest
3 голосов
/ 13 октября 2009

Существует ли онлайновая система, которая преобразует SQL-LINQ, или кто-нибудь еще может помочь преобразовать SQL-LINQ ниже?

SELECT MIN(startTime) As startTime, MAX(endTime) As endTime
FROM tblRA
LEFT JOIN tblA ON tblRA.asID = tblA.asID
WHERE 'xxxxxx' BETWEEN tblRA.startDate AND tblRA.endDate
AND tblA.availabilityDayOfWeek = 7

Основная проблема, с которой я сталкиваюсь, - это .MAX / .MIN.

Вот что у меня есть

    public List<string> GetResourceAvailabilitiesByDate(DateTime searchDate)
    {
        DayOfWeek dayOfWeek = searchDate.DayOfWeek;

        var minVal = from a in dc.tblResourceAvailabilities
                join b in dc.tblAvailabilities on a.asID equals b.asID 
                where searchDate.Date >= a.startDate.Date && searchDate.Date <= a.endDate.Value.Date
                && b.availabilityDayOfWeek == (int)dayOfWeek
                select b.startTime.ToShortTimeString();;

        var maxVal = from a in dc.tblResourceAvailabilities
                     join b in dc.tblAvailabilities on a.asID equals b.asID
                     where searchDate.Date >= a.startDate.Date && searchDate.Date <= a.endDate.Value.Date
                     && b.availabilityDayOfWeek == (int)dayOfWeek
                     select b.endTime.ToShortTimeString();

        var min = minVal.Min(minVal.Min);
        var max = maxVal.Max();

        return min,max;

Заранее спасибо за любую помощь

Clare

1 Ответ

1 голос
/ 15 октября 2009

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

    public List<string> GetResourceAvailabilitiesByDate(DateTime searchDate)
    {
        DayOfWeek dayOfWeek = searchDate.DayOfWeek;

        var vals  = from a in dc.tblResourceAvailabilities
            join b in dc.tblAvailabilities on a.asID equals b.asID 
            where searchDate.Date >= a.startDate.Date && searchDate.Date <= a.endDate.Value.Date
            && b.availabilityDayOfWeek == (int)dayOfWeek
            select b;

        var min = vals.Min(v => v.startTime).ToShortTimeString();
        var max = vals.Max(v => v.startTime).ToShortTimeString();

        return new List<string>() { min, max };
     }

Некоторые комментарии к вашему коду, предполагая, что это C #.

  1. Вы пытаетесь вернуть массив строк, когда вы должны возвращать массив дат.
  2. Ваша фраза where довольно запутана. Вы сравниваете дату поиска с startdate.Date и endDate.Value.Date. Это не имеет особого смысла.
  3. В предложении select можно выбрать только b, или a, или что угодно. Вам не нужно выбирать в нем дату.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...