【问题标题】:RavenDB Linq Invalid Operation .ToUpperInvariant()RavenDB Linq 无效操作 .ToUpperInvariant()
【发布时间】:2012-01-02 16:31:10
【问题描述】:

我正在尝试在带有 RavenDB 的 LINQ 查询中使用 ToUpperInvariant()。我收到 InvalidOperationException

无法理解如何翻译 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;
    }
}

【问题讨论】:

    标签: c# linq ravendb


    【解决方案1】:

    正如异常状态,服务器不理解ToUpperInvariant()。据我所知,RavenDB 使用自定义 LowerCaseKeywordAnalyzer,因此默认情况下查询不区分大小写。 See the RavenDB documentation on analyzers 了解更多详情。

    【讨论】:

    • 好的,很酷,我试图通过转换为大写来进行比较,这甚至没有必要。我只是在没有转换的情况下尝试了它并且它有效。谢谢!
    • 谢谢!我试图做同样的事情;根本不知道这件事。呵呵。
    • 也期待“类似编程语言”的比较行为并遇到了同样的问题。我想我应该预料到“类似数据库”的比较,默认情况下通常会忽略大小写。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多