2012-07-31 10 views
5

No estoy seguro de si esta es la mejor manera de lograr esto en Linq.Linq: Comprobando si la columna de cadena tiene un valor (es decir, no es nula o está vacía)

Estoy tratando de seleccionar registros de contacto en CRM 2011 donde EMailAddress1 contiene un valor. Las siguientes cláusulas WHERE He intentado tanto causadas excepciones:

Where c.EMailAddress1 > "" 

Where Not String.IsNullOrEmpty(c.EMailAddress1) 

así que terminé tratando esto, que parece funcionar bien:

Where Not c.EMailAddress1.Equals(String.Empty) _ 
And Not c.EMailAddress1.Equals(Nothing) 

Pero yo no estoy seguro de si este es el más eficiente método ... no parece muy elegante. ¿Hay alguna manera más clara de verificar si una columna de cadena tiene un valor?

+1

cuando se utiliza String.IsNullOrEmpty, ¿cuál es la excepción de que está recibiendo? –

+0

¿qué tipo de datos es EMailAddress1? –

+0

@ForteL. la excepción es la condición 'Inválido' donde '. Un miembro de la entidad invoca una propiedad o método no válido. ". El tipo de datos es String. –

Respuesta

4

Como se ha dicho here LINQ a CRM es muy limitada. Es por eso que no puedes usar String.IsNullOrEmpty.

Sin embargo, usted debe tratar de hacer esto:

Where c.EMailAddress1 IsNot Nothing 

Cuando un campo está vacío, que está establecido en nulo en la base de datos (no vacío). Esta línea debería ser suficiente para su caso.

Saludos,

Kévin

+0

Gracias por el enlace. También quiero comprobar "" (cadena en blanco, no nulo), por lo que nada en sí mismo no será suficiente. Parece que tiene que hacerse usando 2 condiciones, lo suficiente. –

+1

En realidad, si el usuario deja en blanco el campo, será NULL. Nunca encontrará ningún resultado si cuida una cadena en blanco mediante el uso de linq. Entonces "IsNot Nothing" debería ser suficiente. –

+0

¿Es solo un comportamiento de Linq? Muchos diseños de bases de datos evitan columnas que aceptan nulos. No estoy seguro acerca de CRM 2011 en este caso. Pero suponiendo que una columna en el archivo db es VarChar NOT NULL, ¿linq luego trataría nulo y "" (vacío) de manera diferente? –

2

acaba de hacer:

Where c.EmailAddress <> "" 
+0

Eso también genera la excepción: condición "no válida 'donde'. Un miembro de la entidad invoca una propiedad o método no válido." –

+0

Donde (función (es) s.EmailAddress <> "") = funciona! Las cadenas vacías y nulas no están seleccionadas. –

Cuestiones relacionadas