2009-10-13 64 views
3

是否有一個在線系統可以轉換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; 

感謝所有幫助

克萊爾

+0

幾乎看起來像http://stackoverflow.com/questions/296972/sql-to-linq-tool重複 - 但它不是; OP想要一個在線工具。 hrm ....一個陰天...... – 2009-10-13 14:13:33

+1

我可以轉換大部分查詢,但是我需要一個MIN/MAx到不同的單元格,並且在環顧網絡後發現,人們似乎只會選擇a).MAX ()但我需要選擇a.startDate.MIN,a.endDate.MAX); – ClareBear 2009-10-13 14:17:34

+0

您可能會發現[Linq in Action](http://www.amazon.co.uk/LINQ-Action-Fabrice-Marguerie/dp/1933988169)書很有幫助。 – 2009-10-15 08:47:20

回答

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或其他。你並不需要選擇它的日期。
+0

我已經添加了endDate.Value.Date,因爲它被允許爲空。我只需要約會,所以我不想帶回不會使用的數據。 – ClareBear 2009-10-15 10:27:14

+0

v.StartTime是一個日期時間,而我只需要時間,我該怎麼做? – ClareBear 2009-10-15 10:38:10

+0

好的,更新了我的答案。 – 2009-10-15 11:11:15