web-dev-qa-db-fra.com

String.IsNullOrEmpty dans une requête LINQ To SQL?

Mon DBML expose un jeu d'enregistrements qui possède un champ nvarchar nullable. Ce champ nvarchar nullable est représenté par une chaîne dans mon code C #. 

Parfois, ce champ est nul, parfois c'est une chaîne vide et parfois il a en fait une valeur. 

String.IsNullOrEmpty() fonctionne-t-il dans LINQ To SQL? Par exemple, les travaux suivants:

var results = from result in context.Records
              where String.IsNullOrEmpty(result.Info) == false
              select result;
24
Phone Developer

Curieusement, selon MSDN String.IsNullOrEmpty est pris en charge (en raison du fait qu’il n’est pas non pris en charge), pourtant je ne peux que trouver des plaintes à ce sujet non pris en charge .

Cependant, si cela fonctionne, vous ne devriez pas explicitement le comparer à une valeur booléenne, mais plutôt:

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

Je ne sais pas si ça marche, mais je suis sûr que ça marche:

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

(Nous recommandons fortement les parens, le générateur de requête peut être dérouté sans eux)

19
Amy B

Il n'est pas pris en charge car toute tentative d'utilisation aboutit à une variable NotSupportedException avec ce message:

La méthode 'Boolean IsNullOrEmpty (System.String)' n'est pas prise en charge traduction en SQL.

Au lieu de cela, vous pouvez utiliser cette approche pour faire la même chose:

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

Vous pouvez également utiliser result.Info != String.Empty au lieu de vérifier la longueur. Les deux approches vont fonctionner.

4
Ahmad Mageed

J'ai eu des problèmes avec toutes les réponses, à l'exception de celle de @ ahmad-mageed.

Nous avons fini par utiliser une syntaxe plus concise:

where (result.Info ?? "").Length > 0

Ou 

result => (result.Info ?? "").Length > 0
0
Robert J. Good