2014-03-18 100 views
0

這個簡單的查詢工作並返回預期的4條記錄;LINQ選項構建查詢+日期時間比較

var showIfAfter = DateTime.Now.AddDays(-1); 
var query = _context.OTMLessons.Where(l => l.Date > showIfAfter); 

這個零碎的內置查詢不(假設狀態== A);

var query = _context.OTMLessons.Include("Years").Include("Giver") 
    .Where(l => !l.Hidden); 

if (status != null) 
    switch (status) { 
     case "A": 
      // only records that are current (last day plus important states) 
      var showIfAfter = DateTime.Now.AddDays(-1); 
      query = query.Where(l => l.Date > showIfAfter); 
      break; 
     case "ND": 
      // only records which aren't deleted 
      query = query.Where(l => !l.Status.Equals("Deleted")); 
      break; 
     default: 
      // records of a specific state 
      query = query.Where(l => l.Status.Equals(status)); 
      break; 
    } 

請告訴我爲什麼我是白癡 - 拉我的頭髮...

+0

您確定'.Wherel =>!l.Hidden)是正確的嗎?什麼'_context.OTMLessons._context.OTMLessons.Where(l =>!l.Hidden)'返回? – Ceilingfish

+0

刪除與問題無關; showIfAfter比較的斷點預執行顯示預期結果 – captaincrash

+0

沒有看到更多的代碼,這很難調試。你是否100%確定狀態「A」正確設置?這會導致你無法獲得正確的數據。 –

回答

0

我相信你的問題是在Include()

var query = _context.OTMLessons.Where(l => !l.Hidden); 

if (status != null) 
    switch (status) { 
     case "A": 
      // only records that are current (last day plus important states) 
      var showIfAfter = DateTime.Now.AddDays(-1); 
      query = query.Where(l => l.Date > showIfAfter).Include("Years").Include("Giver"); 
      break; 
     case "ND": 
      // only records which aren't deleted 
      query = query.Where(l => !l.Status.Equals("Deleted")).Include("Years").Include("Giver"); 
      break; 
     default: 
      // records of a specific state 
      query = query.Where(l => l.Status.Equals(status)).Include("Years").Include("Giver"); 
      break; 
    } 

似乎有點冗長;但一旦計算出日期/狀態字段,它應該包含子集合。

0

您的兩個查詢是不同的。第一個說:

_context.OTMLessons.Where(l => l.Date > showIfAfter); 

第二個說(最終:

_context.OTMLessons.Include("Years").Include("Giver") 
.Where(l => !l.Hidden && l.Date > showIfAfter); 

你應該檢查哪些差異導致結果的變化首先儘量讓他們完全一樣,然後啓動。添加更多標準,然後您可以檢查結果更改的位置並驗證您的數據。