#linq
#linq
Вопрос:
это мой пользовательский интерфейс экспорта
это мой код:
var wrlist = db.Tbl_WorkRequest.ToList().Where(c => c.WR_Status == wrstatus amp;amp;
(wrtype.Length != 0) amp;amp;
c.WR_Family == wrfamily amp;amp;
wrfamily.Length!=0)
.Select(d => new {
WR_Title = d.WR_Title.ToString(),
WR_Type = d.WR_Type.ToString(),
WR_Family = d.WR_Family.ToString(),
WR_Status = d.WR_Status.ToString(),
WR_LocationAsset = d.WR_LocationAsset.ToString(),
WR_AssetName = d.WR_AssetName.ToString(),
WR_Requestor = d.WR_Requestor.ToString()
});
проблема в том, что если я выбираю zone только в выпадающем списке:family, он генерирует правильный список.
но когда я выбираю выпадающий список: семья и статус, он ничего не генерирует.
это таблица:
Комментарии:
1. Вы уверены, что значение статуса (
wrstattus
), которое вы отправляете из пользовательского интерфейса, совпадает с базой данных? Вы проверили сгенерированный SQL?2. Что такое зона? Что такое выпадающий список:семейство? Что такое выпадающий список: семья и статус и что это значит? Почему вы используете
ToList
перед вашимWhere
, который переносит всю вашу таблицу в память? Какие типы вашихWR_
полей вам нужно поместитьToString()
в них?3. Почему вы сравниваете с
wrstatus
, но затем тестируетеwrtype.Length
?
Ответ №1:
Я бы изменил ваш код, чтобы проверить каждый критерий фильтрации и добавить соответствующий фильтр, а затем преобразовать в список:
var wrq = db.Tbl_WorkRequest.AsQueryable();
if (wrstatus.Length > 0)
wrq = wrq.Where(wr => wr.WR_Status == wrstatus);
if (wrfamily.Length > 0)
wrq = wrq.Where(wr => wr.WR_Family == wrfamily);
var wrlist = wrq.Select(d => new {
WR_Title = d.WR_Title.ToString(),
WR_Type = d.WR_Type.ToString(),
WR_Family = d.WR_Family.ToString(),
WR_Status = d.WR_Status.ToString(),
WR_LocationAsset = d.WR_LocationAsset.ToString(),
WR_AssetName = d.WR_AssetName.ToString(),
WR_Requestor = d.WR_Requestor.ToString()
})
.ToList();