TransWikia.com

Filtrar sólo si el campo no está vacío c#

Stack Overflow en español Asked by L. Ronquillo on January 4, 2022

Buen día, estoy haciendo un método para devolver registros en datatables.js, parte de mi método, tiene la siguiente consulta:

var Roles = Ss.ListarSucursales().Where(
                x =>
                (x.NombreSucursal.IndexOf(searchColum, StringComparison.OrdinalIgnoreCase) >= 0) ||
                x.Ciudad.Nombre.IndexOf(searchColum, StringComparison.OrdinalIgnoreCase) >= 0 ||
                x.Colonia.IndexOf(searchColum, StringComparison.OrdinalIgnoreCase) >= 0).ToList();

El método funciona, pero me di cuenta que, por ejemplo, si en algún registro el valor de x.Colonia llega como NULL, me salta un error por tratar de filtrar un campo null. Quisiera poder filtrar por ese campo, sólo si ese campo no está vacío. Normalmente para eso, utilizaría !string.IsNullOrEmpty(x.Colonia) pero no sé como implementarlo en el bloque de código anterior.
¿Podrían ayudarme? de antemano muchas gracias 🙂

2 Answers

Si te entendí bien, este código te va a ser de utilidad:

var Roles = Ss.ListarSucursales()
            .Where(x =>
                (x.NombreSucursal.ToLower().Contains(searchColum.ToLower()) ||
                (x.Ciudad.Nombre.ToLower().Contains(searchColum.ToLower()) ||
                (x.Colonia.ToLower().Contains(searchColum.ToLower()))
            .ToList();

Lectura recomendada:

https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.contains?view=netcore-3.1

Answered by fredyfx on January 4, 2022

Prueba usando el operador ??, de la siguiente forma:

la parte

x.NombreSucursal.IndexOf(searchColum, StringComparison.OrdinalIgnoreCase)

quede

(x.NombreSucursal??"").IndexOf(searchColum, StringComparison.OrdinalIgnoreCase)

lo anterior para cada una de las instrucciones que tienes como corresponda.

Lo que hace el operador ?? es que si lo que esta a su izquierda es NULL retorna el valor que pones a su derecha; tal que si x.NombreSucursal en cada interacción que sea NULL devolverá cadena vacía y en los casos que no devolverá el valor de x.NombreSucursal.

Este operador puede ser usado con cualquier tipo de dato; desde luego poniendo a su derecha un mismo tipo de dato al de su derecha, pues la derecha sería el valor por default; es decir si x.NombreSucursal fuese un entero sería x.NombreSucursal??0 o si fuese un objeto x.NombreSucursal??(new ElObjeto()).

Gracias

Answered by RobertoLeOr on January 4, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP