首页 > 解决方案 > 三元运算符中的条件在“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#entity-frameworklinqlinq-method-syntax

解决方案


推荐阅读