c# - 三元运算符中的条件在“Where”方法中被忽略。还有其他更好的查询方法吗?
问题描述
我正在尝试实现一种使用 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 运行此查询?
提前致谢。
解决方案
推荐阅读
- c# - 在其他方法中无法访问变量
- php - PayPal IPN 总是返回 INVALID?
- reactjs - 在反应中动态添加和删除输入字段
- google-bigquery - 查找要插入 BigQuery 的列名
- regex - 从逗号分隔的 cel 中仅获取 X 个字符串
- 64-bit - 在 Solaris 10 上将 pcre 3.38 编译为 64 位 - 错误的 ELF 类
- python - NLTK POS 标签:如何将“Word”及其对应的“POS 标签”放入 DataFrame
- r - 子集只会不断增加值到最大值
- ruby - Ruby:我用 JavaScript 编写的程序在 Ruby 中的工作方式不同
- c# - System.Diagnostics.Process.HasExited 始终返回 true,并且 Process.Exited 事件处理程序始终在进程仍处于打开状态时命中