2013-02-21 85 views
0

我正在編寫一個LINQ查詢來根據用戶輸入和選擇過濾記錄。一些輸入可能不會從用戶提供。所以我需要根據給定的輸入進行過濾。我試着給5個可選輸入中的1個輸出值。但是查詢沒有返回任何東西。請幫我找到正確的查詢。看到查詢後你可以更好地理解。爲什麼我的查詢不返回任何東西

代碼

var model = (from items in Db.Items 
      where ((items.ItemNo == null || 
        items.ItemNo == String.Empty) || 
        ((items.ItemNo.CompareTo(DD.FromItemNo) >= 0) && 
        (items.ItemNo.CompareTo(DD.ToItemNo) <= 0))) && 
        (items.InfoTypeId == 0 || 
        (items.InfoTypeId == DD.InfoType)) && 
        (items.CreatedOn == null || 
        (items.CreatedOn >= DD.Start && 
        items.CreatedOn <= DD.End)) && 
        (items.StatusId == 0 || 
        (items.StatusId == DD.Status)) && 
        (items.LocationId == 0 || 
        (items.LocationId == DD.Location)) && 
        (items.CollectionId == 0 || 
        (items.CollectionId == DD.Collection)) 
      select new ViewModel() 
      { 
       Itemid = items.Id, 
       INo = items.ItemNo, 
       BTags = (from asd in Db.BibContents 
          where asd.BibId == items.BibId && 
           asd.TagNo == "245" && 
           asd.Sfld == "a" 
          select asd.Value).FirstOrDefault(), 
       Sid = (from stat in Db.ItemStatus1 
         where stat.Id == items.StatusId 
         select stat.Description).FirstOrDefault(), 

       Option = DD.Option, 
       CurrItemNo = DD.ItemNumber 
      }).ToList(); 
+10

嗯,你已經有了一個*那條'where'條款中的條件數量巨大*。我建議你通過全部刪除來診斷,然後一次一個地加回去。 – 2013-02-21 11:15:52

+0

對於第一個條件工作正常。當第二個條件包含第二個條件但未傳遞第二個條件的任何數據時,將無法獲得第一個條件的匹配記錄。 – UniqueChar 2013-02-21 11:28:49

+0

@JonSkeet他應該添加什麼作爲第一個參數,如果所有都應該被刪除?我知道你在數據庫語言中使用類似'1 == 1'的東西,但是LINQ可能有類似的東西嗎? (或者他應該完全刪除「where」) – Default 2013-02-21 11:57:47

回答

0

你得檢查DD的值null秒或0 S,不是那些items

var model = (from items in Db.Items 
    where 
    (
     (DD.ItemNo == null || DD.ItemNo == String.Empty) 
     || (items.ItemNo.CompareTo(DD.FromItemNo) >= 0 && items.ItemNo.CompareTo(DD.ToItemNo) <= 0) 
    ) 
    && (DD.InfoTypeId == 0 || (items.InfoTypeId == DD.InfoType)) 
    && (DD.CreatedOn == null || (items.CreatedOn >= DD.Start && items.CreatedOn <= DD.End)) 
    && (DD.StatusId == 0 || (items.StatusId == DD.Status)) 
    && (DD.LocationId == 0 || (items.LocationId == DD.Location)) 
    && (DD.CollectionId == 0 || (items.CollectionId == DD.Collection)) 
    select ... 
+0

非常感謝您發佈此正確的代碼。 – UniqueChar 2013-02-21 12:06:47

相關問題