2012-01-02 19 views
6

RavenDB ile bir LINQ sorgusunda ToUpperInvariant() kullanmaya çalışıyorum.RavenDB Linq Geçersiz İşlem .ToUpperInvariant()

(server.Name.ToUpperInvariant çevirmek nasıl anlayamıyorum): Ben bir InvalidOperationException alıyorum.

Sorgu aşağıda. Burada isimle eşleşebilmem için ne olması gerekiyor? RavenDB kullanarak bir sorgu içinde bu mümkün mü?

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; 
    } 
} 

cevap

8

Kural dışı durum olarak, sunucu ToUpperInvariant() öğesini anlamıyor. Bildiğim kadarıyla, RavenDB özel bir LowerCaseKeywordAnalyzer kullanır, bu nedenle varsayılan sorgulara büyük/küçük harf duyarlı değildir. Daha fazla ayrıntı için See the RavenDB documentation on analyzers.

+0

Tamam, havalı, büyük harfe dönüştürerek karşılaştırmaya çalışıyordum ve bu gerekli değildi. Dönüştürmeden çalıştım ve işe yaradı. Teşekkür ederim! –

+0

Teşekkürler! Ben de aynı şeyi yapmaya çalışıyordum; Bunu hiç bilmiyordum. Hamuru. – Darryl

+0

Karşılaştırma davranışı "programlama dili" de bekliyordu ve aynı soruna yol açtı. Sanırım, varsayılan olarak durumu görmezden gelmek için "Veritabanı gibi" karşılaştırması beklemeliydim. Teşekkürler! –