我正在尝试实现一种使用 EF 和 Linq 方法语法从数据库中检索数据的方法。该方法有 5 个参数(四个 List 和一个字符串),每个参数必须作为查询结果的过滤器。
在“Where”方法中使用三元运算符在以下代码的某些表达式(1-4)中有效,但在表达式(5)中,无论“nameFilter”的字符串值如何,使用三元运算符都完全忽略了 Where 条件在表达式 (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 运行此查询?
提前致谢。