Условие в троичном операторе игнорируется в методе «Где».Есть ли другой лучший подход к запросу? - PullRequest
0 голосов
/ 02 января 2019

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

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

...