2012-07-31 12 views
5

Non sono sicuro se questo è il modo migliore per ottenere ciò in Linq.Linq: verifica se la colonna di stringhe ha un valore (ad es. Non è nullo o vuoto)

Sto provando a selezionare i record di contatto in CRM 2011 dove l'indirizzo email1 contiene un valore. Le seguenti clausole in cui ho cercato entrambi causati eccezioni:

Where c.EMailAddress1 > "" 

Where Not String.IsNullOrEmpty(c.EMailAddress1) 

così ho finito per provare questo, che sembra funzionare bene:

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

Ma io non sono solo sicuro se questo è il più efficiente metodo .. non sembra molto elegante. Esiste un modo più ordinato per verificare se una colonna di stringhe ha un valore?

+1

quando si utilizza String.IsNullOrEmpty, qual è l'eccezione che hai trovato? –

+0

quale tipo di dati è EMailAddress1? –

+0

@ForteL. l'eccezione è "Invalido" dove "condizione. Un membro di entità sta invocando una proprietà o un metodo non validi". Il tipo di dati è String. –

risposta

4

Come detto here LINQ to CRM è davvero limitata. Ecco perché non puoi usare String.IsNullOrEmpty.

Tuttavia, si dovrebbe provare a fare questo:

Where c.EMailAddress1 IsNot Nothing 

Quando un campo è vuoto, è impostato su NULL nel database (mai vuoto). Questa linea dovrebbe quindi essere sufficiente per il tuo caso.

saluti,

Kévin

+0

Grazie per il link. Voglio anche controllare "" (stringa vuota, non null), quindi niente da solo non sarà sufficiente. Sembra che debba essere fatto usando 2 condizioni, abbastanza giuste. –

+1

In realtà, se l'utente lascia il campo vuoto, sarà NULL. Non avrai mai trovato alcun risultato se prendi in considerazione una stringa vuota usando linq. Quindi "IsNot Nothing" dovrebbe essere sufficiente. –

+0

E 'solo un comportamento Linq? Molti progetti di database evitano colonne nullable. Non sono sicuro di CRM 2011 in questo caso. Ma supponendo che una colonna nel db sia VarChar NOT NULL, allora linq considererà null e "" (vuoto) in modo diverso? –

2

basta fare:

Where c.EmailAddress <> "" 
+0

Ciò solleva anche l'eccezione: "Invalid 'where' condition. Un membro dell'entità sta invocando una proprietà o un metodo non validi." –

+0

Where (Function (s) s.EmailAddress <> "") = funziona! Le stringhe Null e Empty non sono selezionate. –

Problemi correlati