Предложение Linq @ Where с несколькими условиями

#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();