转换SQL - LINQ - 使用Min / Max时出现问题

时间:2009-10-13 14:02:58

标签: sql linq

是否有一个在线系统可以转换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;

提前感谢您提供任何帮助

克莱尔

1 个答案:

答案 0 :(得分:1)

我认为你的代码有点不正确,它的第一个症状是你使用重复的代码来定义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或其他。你真的不需要选择日期。