2011-11-08 24 views
20

Mi DBML expone un conjunto de registros que tiene un campo nvarchar nulo. Este campo nvarlable nvarchar se representa como una cadena en mi código C#.String.IsNullOrEmpty in LINQ ¿A la consulta SQL?

A veces, este campo es nulo, a veces es una cadena vacía y, a veces, tiene un valor.

¿Funciona String.IsNullOrEmpty() en LINQ to SQL? Por ejemplo, sería el siguiente trabajo:

var results = from result in context.Records 
       where String.IsNullOrEmpty(result.Info) == false 
       select result; 
+1

Puedes probar, LinqPad es tu enemigo. (http://www.linqpad.net/) –

+1

duplicado de http://stackoverflow.com/questions/1368946/linq-syntax-where-string-value-is-not-null-or-empty – hatchet

Respuesta

36

Curiosamente, por MSDN String.IsNullOrEmpty es compatible (en virtud de que no fuera sin soporte), sin embargo, sólo puedo encontrar quejas al respecto not being supported.

Sin embargo, si no funciona no se debe comparar explícitamente a un valor booleano, en su lugar:

var results = from result in context.Records 
      /*XXX broke :(where !String.IsNullOrEmpty(result.Info) */ 
      where !(result.Info == null || result.Info.Equals("")) 
      select result; 
+1

Eso no lo hizo funcionó para mí Profiler mostró solo comprobar la cadena vacía, pero no el valor 'nulo'. –

17

No sé si eso funciona, pero estoy seguro de que esto hace:

where (result.Info ?? "") != "" 

(recomendamos los parens, generador de consultas puede confundirse sin ellos)

+2

Me gusta este, pero supongo que no es compatible con 'String.IsNullOrEmpty' sin documentación en ese sentido, el [nulo coalesce operador es compatible sin documentación] (http://msdn.microsoft.com/en-us/library /bb882653.aspx)! Oy. – user7116

2

no se admite desde intentar usarlo como resultado una NotSupportedException ser lanzado con este mensaje:

Método 'booleana IsNullOrEmpty (System.String)' no tiene el apoyo traducción a SQL.

su lugar, puede utilizar este método para hacer la misma cosa:

var results = from result in context.Records 
       where result.Info != null && result.Info.Length > 0 
       select result; 

También puede utilizar result.Info != String.Empty en vez de comprobar la longitud. Ambos enfoques funcionarán.