Условие в троичном операторе игнорируется в методе "Где". Есть ли другой лучший подход к запросу?
Я пытаюсь реализовать метод для извлечения данных из базы данных с использованием синтаксиса EF и метода Linq. У метода есть 5 параметров (четыре списка и одна строка), каждый параметр должен работать как фильтр для результата запроса.
Использование тернарного оператора в методах "Где" работает в некоторых выражениях (1-4) следующего кода, но в выражении (5) условие "Где" полностью игнорируется, независимо от строкового значения "nameFilter", используя тернарный оператор в выражении (5) игнорируется, при отладке я проверил, что условие приводит к !nameFilter.Equals("")
было верно, когда значение nameFilter равно "".
public IEnumerable<UNIDADE> RecuperarPorEmpresaEstadoCITYTipoUnidadeFiltroNAME( List<int> companiesId, List<int> statesId, List<int> citiesId, List<int> typesId, string nameFilter )
{
return base.Dataset
.Where( u => companiesId.Count() > 0 ? companiesId.Contains( u.COMPANY_ID ) : true ) //1
.Where( u => statesId.Count() > 0 ? statesId.Contains( u.CITY.STATE_ID ) : true ) //2
.Where( u => citiesId.Count() > 0 ? citiesId.Contains( u.CITY_ID ) : true ) //3
.Where( u => typesId.Count() > 0 ? typesId.Contains( u.TYPE_ID ) : true ) //4
.Where( u => !nameFilter.Equals("") ? u.NAME.ToUpper().Contains( nameFilter.ToUpper() ) : true ); //5
}
Finnaly, пытаясь решить вопрос, я изменил выражение .Where( u => !nameFilter.Equals("") ? u.NAME.ToUpper().Contains( nameFilter.ToUpper() ) : true );
в
.Where( u => nameFilter.Length > 0 ? u.NAME.ToUpper().Contains( nameFilter.ToUpper() ) : true )
И это сработало.
Я новичок в C# и Entity Framework, поэтому я хотел бы понять, почему при сравнении со строкой тернарный оператор каким-то образом игнорировался, тогда как сравнение с "Length" дало мне ожидаемый результат. Есть ли другой подход для запуска этого запроса с Entity Framework?
Заранее спасибо.