2012-01-02 14 views
6

Estoy tratando de usar ToUpperInvariant() dentro de una consulta LINQ con RavenDB. Recibo un InvalidOperationException:RavenDB Linq Operación no válida .ToUpperInvariant()

no pueden entender cómo traducir server.Name.ToUpperInvariant().

La consulta está por debajo. ¿Qué debe suceder para poder hacer coincidir mi nombre aquí? ¿Es esto posible dentro de una consulta usando RavenDB?

public ApplicationServer GetByName(string serverName) 
{ 
    return QuerySingleResultAndCacheEtag(session => session.Query<ApplicationServer>() 
     .Where(server => server.Name.ToUpperInvariant() == serverName.ToUpperInvariant()).FirstOrDefault()) 
     as ApplicationServer; 
} 

protected static EntityBase QuerySingleResultAndCacheEtag(Func<IDocumentSession, EntityBase> func) 
{ 
    if (func == null) { throw new ArgumentNullException("func"); } 

    using (IDocumentSession session = Database.OpenSession()) 
    { 
     EntityBase entity = func.Invoke(session); 
     if (entity == null) { return null; } 
     CacheEtag(entity, session); 
     return entity; 
    } 
} 

Respuesta

8

Como los estados de excepción, el servidor no entiende ToUpperInvariant(). Hasta donde yo sé, RavenDB usa un CustomCaseKeywordAnalyzer personalizado, por lo que las consultas por defecto no distinguen entre mayúsculas y minúsculas. See the RavenDB documentation on analyzers para más detalles.

+0

Bien, bien, estaba tratando de comparar mediante la conversión a mayúsculas, y eso ni siquiera era necesario. Lo intenté sin convertirlo y funcionó. ¡Gracias! –

+0

¡Gracias! Intentaba hacer lo mismo; no sabía nada de esto. Doh. – Darryl

+0

Estaba esperando un comportamiento de comparación similar al "lenguaje de programación" y se encontró con el mismo problema. Supongo que debería haber esperado una comparación de "Base de datos similar", que por lo general es ignorar caso por defecto. ¡Gracias! –

Cuestiones relacionadas