2013-02-21 166 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

相关问题