Я пытаюсь реализовать метод для извлечения данных из базы данных с использованием синтаксиса 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?
Заранее спасибо.