我正在尝试实现一种使用EF和Linq方法语法从数据库检索数据的方法。该方法有5个参数(四个List和一个字符串),每个参数必须用作查询结果的过滤器。
在“ Where”方法中使用三元运算符可在以下代码的某些表达式(1-4)中使用,但在表达式(5)中,无论“ nameFilter”的字符串值如何,都将完全忽略Where条件,使用表达式(5)中的三元运算符被忽略,在调试时,我检查了当nameFilter值为“”时!nameFilter.Equals("")
中的条件结果为true。
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
}
最后,尝试解决此问题,我更改了表达式.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的新手,所以我想了解为什么在与字符串进行比较时,与“长度”进行比较时,以某种方式忽略了三元运算符给了我预期的结果。是否有另一种方法可以使用Entity Framework运行此查询?
谢谢。