2016-02-08 283 views
0

我在添加datetime檢查作爲where子句的一部分時遇到linq子查詢返回無效數據的問題。實體框架DateTIme查詢

這是原始查詢,它返回0;因爲結果集是null

var subquery = 
    (from item in g 
    from e in item.Entry 
    where e.Type == 1 
     && e.EntryType == 2 
     && item.StartDate >= priorMonthStartOfDay 
     && item.EndDate <= startOfDayQueryParam 
    select e.Amount).Sum() ?? 0M; 

我修改查詢看到的數據是什麼;這裏是查詢和結果數據集。

var subquery = 
    (from item in g 
    from e in item.Entry 
    where e.Type == 1 
     && e.EntryType == 2 
    select new 
      { 
       Amount = e.Amount, 
       SD = item.StartDate, 
       ED = item.EndDate, 
       QD = priorMonthStartOfDay 
      }; 

no date restriction results

於是我在開始日期進行比較,並將結果如下。該priorMonthStartOfDay是與12/1/2015 12:00:00 AM

var subquery = 
    (from item in g 
    from e in item.Entry 
    where e.Type == 1 
     && e.EntryType == 2 
     && item.StartDate >= priorMonthStartOfDay 
    select new 
      { 
       Amount = e.Amount, 
       SD = item.StartDate, 
       ED = item.EndDate, 
       QD = priorMonthStartOfDay 
      }; 

start date restriction

爲什麼不表現爲我所期望的日期比較值的日期時間?給定priorMonthStartOfDay的值,我期望結果集在最後兩個查詢中是相同的。我猜它與時間相等的比較有關,因爲如果我從priorMonthStartOfDay中減去一秒,那麼結果集再次匹配。

+0

什麼'priorMonthStartOfDay'的最後一個查詢的數據類型?它是一個「字符串」還是「DateTime」? – gldraphael

+0

@gldraphael DateTime;更新的問題 – drneel

+0

你可以說明你如何設置'priorMonthStartOfDay'?它可能不是你在調試器中看到的。 –

回答

0

唯一合乎邏輯的解釋可能是您的priorMonthStartOfDay和/或startOfDayQueryParam變量包含調試器中未顯示的時間部分。請注意,默認毫秒部分不顯示,更不用說滴答聲了。

是100%肯定你是比較反對日期,該標準的日期部分更改爲

&& item.StartDate >= priorMonthStartOfDay.Date 
&& item.EndDate <= startOfDayQueryParam.Date 
+0

這是蜱蟲。他們一個一個地離開了;我已經檢查了毫秒,我甚至看過蜱,但顯然不夠接近。 – drneel