2012-01-02 76 views
6

我试图在LINQ查询中使用ToUpperInvariant()与RavenDB。我发现了一个出现InvalidOperationExceptionRavenDB Linq无效操作.ToUpperInvariant()

能不知道如何翻译server.Name.ToUpperInvariant()。

查询如下。为了让我能够在这里与名字相匹配,需要发生什么?这在使用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

好吧,酷,我试图通过转换为大写比较,这甚至不是必要的。我只是尝试了它,没有转换,它的工作。谢谢! – 2012-01-02 17:17:23

+0

谢谢!我试图做同样的事情;根本不知道这件事。卫生署。 – Darryl 2013-03-08 22:14:50

+0

也期待“编程语言像”的比较行为,并遇到同样的问题。我想我应该预料到“数据库喜欢”比较,通常默认情况下会忽略大小写。谢谢! – 2016-10-14 05:14:37