Я писал запрос LINQ для фильтрации записей на основе ввода и выбора пользователем. Некоторые из входов могут не предоставляться от пользователя. Поэтому мне нужно фильтровать на основе данного ввода. Я попытался дать значение только для 1 из 5 дополнительных входов. Но запрос ничего не возвращает. Пожалуйста, помогите мне найти правильный запрос. вы можете лучше понять, увидев запрос.Почему мой запрос ничего не возвращает
Код
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();
Ну, у Вас есть * огромное количество условий в этом предложении 'where'. Я предлагаю вам диагностировать это, удалив их все, а затем добавив их обратно по одному. –
Для первого условия работает отлично. При включении второго условия без передачи каких-либо данных для второго условия невозможно получить совпадающую запись для первого условия. – UniqueChar
@JonSkeet, что он должен добавить в качестве первого аргумента, где, если все нужно удалить? Я знаю, что вы используете что-то вроде '1 == 1' в языке базы данных, но возможно ли что-то подобное для LINQ? (или он должен просто удалить «где» вообще) – Default