2012-01-02 13 views
6

ToUpperInvariant()をRavenDBのLINQクエリ内で使用しようとしています。RavenDB Linq操作が無効です.ToUpperInvariant()

は(server.Name.ToUpperInvariantを変換する方法を理解することはできません):私はInvalidOperationExceptionがを取得しています。

クエリは以下のとおりです。私はここで名前を一致させるために何が起こる必要がありますか?これは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; 
    } 
} 

答えて

8

例外として、サーバーはToUpperInvariant()を理解しません。私が知る限り、RavenDBはカスタムLowerCaseKeywordAnalyzerを使用しているため、デフォルトでは大文字と小文字は区別されません。詳細についてはSee the RavenDB documentation on analyzersをご覧ください。

+0

私は大文字に変換して比較しようとしていましたが、それは必要でもありませんでした。私は変換せずに試してみたところ、うまくいきました。ありがとうございました! –

+0

ありがとうございます!私は同じことをやろうとしていた。これについて全く知らなかった。 Doh。 – Darryl

+0

"プログラミング言語のような"比較動作も期待していて、同じ問題が発生しました。私は、通常は大文字小文字を無視して "データベースのような"比較を期待していたはずです。ありがとう! –

関連する問題