2015-09-03 161 views
0

這是我的全套數據,突出顯示的行應該由我的查詢返回,但它不返回任何數據。LINQ不返回正確的數據行

http://screencast.com/t/S0DgVgIuQS

和LINQ是這樣

if (filtro.Equals("Pendientes")) 
{ 
    var activididadesFiltradas = actividades 
       .Where(p => (Convert.ToDateTime(p.fechaVencimiento) >= DateTime.Today) 
        && (Convert.ToDateTime(p.fechaVencimiento) <= DateTime.Today.AddDays(7)) 
        && (p.estado != "Documentada")).ToList(); 
    return activididadesFiltradas; 
} 

基本上它應該回到那裏fechavencimiento今天至7天在未來的數據,以及國家體制不同,以Documentada,如果你看到的截圖,條件得到滿足。

順便說一句,該數據集在字符串中的日期,所以我比較

Upodate1

我也試過在此之前,將它們轉換,但沒有結果

var present = DateTime.Today; 
        var future = DateTime.Today.AddDays(7); 
        var validIDs = actividades 
          .Select(s => new 
          { 
           id = s.ID, 
           filter = s.fechaVencimiento, 
           date = Convert.ToDateTime(s.fechaVencimiento, CultureInfo.InvariantCulture), 
           present = new DateTime(present.Year, present.Month, present.Day), 
           future = new DateTime(future.Year, future.Month, future.Day) 
          }) 
          .Where(m => (m.date - m.present).TotalDays >= 0 && (m.future - m.date).TotalDays >= 0 && !m.filter.Equals("Documentada")) 
          .Select(s => s.id); 

        var activididadesFiltradas = actividades.Where(a => validIDs.Contains(a.ID)).ToList(); 

更新2

這是應該退回的記錄:

http://screencast.com/t/1SUjRV2rVGa

+4

你檢查你的日期正確解析?文化等? – Sign

+0

在沒有指定文化的情況下依賴Convert.ToDateTime是很危險的。 – varocarbas

+0

我會說同樣的事情,標誌說,問題可能是轉換,而不是查詢。 –

回答

1

你比較不花時間成分考慮在內。即使您的日期被正確解析,但如果它沒有包含字符串表示中的時間元素,您最終可能會遇到日期爲2015年1月1日00:00:00:000且'today'爲2015/01/01 03:12:56:001看到你只對幾天感興趣,我會建議首先「標準化」你的日期,然後根據結果進行過濾。

可能是這樣的:

var format = "dd/MM/yyyy"; 

    var present = DateTime.ParseExact (DateTime.Today.ToString(format, CultureInfo.InvariantCulture), format, CultureInfo.InvariantCulture); 
    var future = DateTime.ParseExact (DateTime.Today.AddDays (7).ToString(format, CultureInfo.InvariantCulture), format, CultureInfo.InvariantCulture); 

    var activididadesFiltradas = actividades 
     .Where(p => ((DateTime.ParseExact(p.fechaVencimiento, format, CultureInfo.InvariantCulture) - present).TotalDays >= 0) 
      && (future - DateTime.ParseExact(p.fechaVencimiento, format, CultureInfo.InvariantCulture)).TotalDays >= 0 
      && (p.estado != "Documentada")).ToList(); 

    return activididadesFiltradas; 
+0

該領域本身從不使用時間,信息來自於分享點列表,所以我們總是把時間設置在幕後到午夜 –

+0

文化呢?是不是thaproblem?t –

+0

查詢仍然不會返回任何東西 –

2
`"(Convert.ToDateTime(p.fechaVencimiento) >= DateTime.Today)"` 

7/09/2015絕對不是>=今日(在MM/dd/yyyy)格式

+0

在西班牙,它是。這就是爲什麼問題最可能的原因是沒有使用正確的文化(他的電腦可能會像你一樣思考)。 – varocarbas

+0

這取決於對「7/09」的解析。如果預期值是9月7日,那麼是比今天更大(「今天」是9月3日)。因此,@varocarbas在日期轉換中使用語言環境的評論。 –

+0

@varocarbas:呵呵,當我開始打字時,您對此答案的評論不存在。我得到了忍者。 –