2011-08-19 22 views
6

Sto utilizzando MVC3 con Entity Framework 4.1 e ho una griglia che viene cercata dal primo carattere del nome della società. Ho funzionato alla grande ma alcune aziende iniziano con un numero. Sto utilizzando la seguente query LINQ per ottenere le società che iniziano con il numero selezionato, ma come posso selezionare quelle che iniziano con un numero?Entity Framework: dove il campo inizia con il numero

var b = (from c in dbContext.Companies 
      where c.CompanyName.StartsWith(selectedCharacter) 
      select c) 

ho provato:

where char.IsNumber(l.CompanyName[0]) 

Ma, ottengo un errore perché non sa come convertirlo in SQL.

Modifica: so che potrei fare .CompanyName.StartsWith ("1") || .CompanyName.StartsWith ("2"), ecc. Esiste un modo migliore? . Qualche idea?

+2

E qual è un problema con c.CompanyName.StartsWith (selectedCharacter) come selezionatoCarattere può ancora essere '1', '2' .... – Incognito

+0

Da quando ho postato la domanda l'ho provato usando .CompanyName.StartsWith ("1 ") || .CompanyName.StartsWith ("2") ed è probabilmente il modo migliore ma sembra ripetitivo. L'SQL è quello che ti aspetteresti: DOVE ([Extent1]. [CompanyName] LIKE '1%') OR ([Extent1]. [CompanyName] LIKE '2%') OR ([Extent1]. [CompanyName] LIKE '3%') .. ecc. – Jamiegs

risposta

9

Si potrebbe fare qualcosa di simile.

var numbers = new string[]{"1","2","3","4","5","6","7","8","9","0"}; 
var b = (from c in dbContext.Companies 
     where numbers.Contains(c.CompanyName.Substring(0,1)) 
     select c).ToList(); 

Si potrebbe incorrere in un problema se la società è vuota.

+0

Ho provato il tuo suggerimento ma ottengo la seguente eccezione: Impossibile creare un valore costante di tipo 'System.Char'. Solo i tipi primitivi ('come Int32, String e Guid') sono supportati in questo contesto. – Jamiegs

+0

Puoi semplicemente cambiare il nuovo carattere in stringa. Aggiornerà la mia risposta ora. – Jethro

+0

L'ho provato prima, ma fornisce la seguente eccezione: LINQ to Entities non riconosce il metodo 'System.String ToString()' e questo metodo non può essere tradotto in un'espressione di archivio. – Jamiegs

Problemi correlati