2016-03-11 6 views
5

Sto interrogando una tabella utilizzando Entity Framework. Il primo bit di codice era ciò che scrivevo, il secondo era ciò che ReSharper suggeriva di rifattorizzare anche io. Il primo restituisce con grazia null come dovrebbe se la chiave non esiste, ma il secondo genera un'eccezione.Eccezione di confronto stringa all'interno di Entity Framework FirstOrDefault

Questo ha tentato di 0-1 record nella tabella (tutte le colonne sono contrassegnati come NOT NULL)

codice che funziona:

context.brandlink.FirstOrDefault(x => x.ManufacturerKey.ToLower() == manufacturerKey.ToLower()); 

e il codice che non funziona:

context.brandlink.FirstOrDefault(x => String.Equals(x.ManufacturerKey, manufacturerKey, StringComparison.InvariantCultureIgnoreCase)); 

Eccezione gettata:

Numero errato di argomenti forniti per la chiamata al metodo 'booleano Equals (System.String, System.String, System.StringComparison)'

Quindi la mia domanda è: qual è la differenza tra le due espressioni?

risposta

9

Quindi la mia domanda è: qual è la differenza tra le due espressioni?

Il diffence è che la successiva sta usando CLR String.Equals Method (String, String, StringComparison) che non è supportato da EF secondo CLR Method to Canonical Function Mapping mentre tutti i metodi usati nella (operatore string.ToLower e uguaglianza stringa) ex sono supportati.

In generale non è possibile controllare i confronti di sting per le interrogazioni EF dal codice perché sono controllati dal database.

Problemi correlati