2013-01-18 20 views
25

Eventuali duplicati:
LINQ Contains Case InsensitiveEntity Framework - case insensitive Contiene?

Voglio una soluzione a questo problema che non coinvolge ToUpper o ToLower, come io uso nel codice qui sotto;

var upper = term.ToUpper(); 
using (var db = this.DataContext) 
{ 
    return db.Counties.Where(x => x.CountyName.ToUpper().Contains(upper)).ToList(); 
} 

Sto usando entitly quadro in modo che il C# soluzione di utilizzare StringComparison.CurrentCultureIgnoreCase non funziona. Funziona per Equals, EndsWith e StartsWith, ma non Contains.

+0

Forse questa risposta è quello che si può assumere: http://stackoverflow.com/a/444818/3312 –

+0

possibile duplicato del [LINQ Contiene Case Insensitive] (http://stackoverflow.com/questions/ 3360772/linq-contains-case-insensitive) o [Case insensitive contains (string)] (http://stackoverflow.com/questions/444798/case-insensitive-taintainsstring) –

+1

Nessuno dei due si applica. Queste soluzioni non funzionano nel framework delle entità, come ho cercato di evidenziare nel secondo paragrafo della domanda. – arame3333

risposta

-3

Basta aggiungere .ToLoWer() da upper

using (var db = this.DataContext) 
      { 
       return db.Counties 
         .Where(x => x 
         .CountyName.ToLower() 
         .Contains(upper.ToLoWer())).ToList(); 
      } 
+4

Se leggi la domanda, ti faccio notare che non voglio usarlo come risposta. – arame3333

+0

In questo momento questa è l'unica risposta che riesco a trovare? – Zapnologica

+3

Questa risposta mi ha aiutato haha ​​... Ho appena passato a usare inferiore anziché superiore .. grazie amico! – bboyle1234

3

Io uso EF6 e SQL Server e Contains è mappata LIKE '%@p0%' che è case insensitive nel mio caso. Nel mio caso:

db.Counties.Where(x => x.CountyName.Contains(term)).ToList(); 

funziona come necessario. Maggiori informazioni in Sjoerd answer.

+1

Nel tuo caso indica solo che hai configurato le regole di confronto case sensitive. Niente di più, niente di meno. – Tomas

+0

Nel mio caso, posso eseguire la tua query ed è case sensitive. Quindi penso che @Tomas abbia capito, ma sarebbe fantastico se EF potesse aggiungere una funzione per specificare. Perché si potrebbe desiderare la distinzione tra maiuscole e minuscole in 1 query e quindi senza distinzione tra maiuscole e minuscole in un altro. – Zapnologica

5

So che questo non è legato direttamente alla EF, ma unica soluzione mi viene in mente è quello di modificare la DB colonna della tabella di confronto per essere Case Insensitive esempio:

ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME nvarchar(100) COLLATE Latin1_General_CI_AS NULL 

CI - case insensitive/ CS - maiuscole e minuscole

AS - accento sensibile/ AI - accento insensitive (può anche essere utile)

Se non è possibile modificare le regole di confronto di colonna della tabella è possibile utilizzare interrogazione diretta da EF con costringendo co llation

select * 
from table 
where country collate Latin1_General_CI_AS != @country 
Problemi correlati