2011-10-29 9 views
5

Come utilizzare Trimstart in modo che il framework di entità comprenda cosa fare?Trimstart utente in query quadro entità

Ecco la mia domanda:

string number="123"; 
Workers.Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number); 

Come posso fare questo lavoro query senza l'AsEnumerable (ci sono un sacco di lavoratori in azienda 8)?

+0

Il numero è sempre numerico? –

+0

@Austin Salonen: Number is string! – Naor

+0

Infatti. Immagino che volevo dire che il contenuto della stringa è sempre numerico (come il tuo esempio) o qualcosa del tipo 'AAK89234' è un" numero "valido? –

risposta

10

Provare a utilizzare SqlFunctions.PatIndex per questo. Ho testato una query simile a quella sottostante con i valori "000123", "000One", "abcde" e ha selezionato correttamente le righe con i valori "123", "One" e "abcde".

Workers.Where(x => x.CompanyId == 8 && 
        x.Number.Substring(SqlFunctions.PatIndex("%[^0]%", x.Number).Value - 1) == number); 
-1

È perché le funzioni di assetto in SQL possibile tagliare solo spazi bianchi in modo EF supporta TrimStart metodo, ma solo senza parametri.

Il tuo requisito dovrebbe in primo luogo portare a una discussione sull'aumento della qualità dei dati nel tuo database! I tuoi dati non forniscono qualità per supportare questo tipo di query in modo efficiente.

+0

Capisco cosa si sta, questo è un problema che i dati memorizzati con zeri. Ma al momento questo è il sistema e ho bisogno di trovare una soluzione per questo. Grazie. – Naor

+0

Downvoted - Sono d'accordo che il database è dove i dati dovrebbero essere ripuliti ma i db di terze parti non sempre danno il controllo di ciò. Una risposta più utile sarebbe una soluzione al problema come menzionato da Jeff. -Tra molte risposte teoriche e non abbastanza pratico su SO. – hewstone

Problemi correlati