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;
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;
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)
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.
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