“ Where”方法中的三元运算符条件被忽略。还有另一种更好的查询方法吗?

时间:2019-01-02 17:21:51

标签: c# entity-framework linq linq-method-syntax

我正在尝试实现一种使用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运行此查询?

谢谢。

0 个答案:

没有答案