Условие в троичном операторе игнорируется в методе "Где". Есть ли другой лучший подход к запросу?

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

Заранее спасибо.

0 ответов

Другие вопросы по тегам