为什么我的查询不返回任何东西
问题描述:
我正在编写一个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();
答
你得检查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
嗯,你已经有了一个*那条'where'条款中的条件数量巨大*。我建议你通过全部删除来诊断,然后一次一个地加回去。 – 2013-02-21 11:15:52
对于第一个条件工作正常。当第二个条件包含第二个条件但未传递第二个条件的任何数据时,将无法获得第一个条件的匹配记录。 – UniqueChar 2013-02-21 11:28:49
@JonSkeet他应该添加什么作为第一个参数,如果所有都应该被删除?我知道你在数据库语言中使用类似'1 == 1'的东西,但是LINQ可能有类似的东西吗? (或者他应该完全删除“where”) – Default 2013-02-21 11:57:47