【问题标题】:How to ignore case using breeze FilterQueryOp如何使用轻风 FilterQueryOp 忽略大小写
【发布时间】:2013-11-28 06:07:30
【问题描述】:

我正在使用微风从服务器查询数据,似乎遇到了问题。 有没有办法过滤这些数据并忽略大小写或使字段中的值小写? 示例:

var term = "john"; 
query = query.where("Name", "contains", Term);

我遇到的问题是,如果“姓名”字段包含大写字母“J”的约翰,它会返回 false,但如果我将术语更改为“约翰”则返回 true。 我知道这是案例问题,但我怎样才能让微风忽略外壳?不使用 jquery.each。

谢谢。任何帮助将不胜感激。

【问题讨论】:

    标签: json asp.net-web-api odata breeze ignore-case


    【解决方案1】:

    在我看来,有一种更简单的方法。

    默认情况下,OData 区分大小写,但仍提供将字符串转换为小写或大写的函数。因此,要向服务器发出不区分大小写的查询,只需按如下方式修改您的代码:

    var term = "john"; 
    query = query.where("tolower(Name)", breeze.FilterQueryOp.Contains, term.toLowerCase());
    

    因此,OData 被告知在将其与您的搜索字符串进行比较之前将其转换为小写,在将其发送到服务器之前已将其转换为小写。

    【讨论】:

      【解决方案2】:

      好的,这有两个部分。 Breeze 支持用于所有 localQueries 的 LocalQueryComparisonOptions 对象。

          var lqco = new breeze.LocalQueryComparisonOptions({
              name: "custom comparison options",
              isCaseSensitive: false,
              usesSql92CompliantStringComparison: true
          });
          // either apply it globally
          lqco.setAsDefault();
          // or to a specific MetadataStore
          var ms = new breeze.MetadataStore({ localQueryComparisonOptions: lqco });
          var em = new breeze.EntityManager( { metadataStore: ms });
      

      您应该在应用程序开始时设置一次。在此示例中,在此之后执行的所有 localQueries 都将不区分大小写。

      问题在于,除非您的数据库也设置为“匹配”这些设置(执行此操作因数据库供应商而异),否则针对服务器的远程查询将返回不同的结果,然后在本地应用相同的查询。

      基本上,Breeze 无法设置“服务器”端实现,因此建议通常创建一个与服务器端数据库设置匹配的 localQueryComparisons 对象。

      希望这是有道理的。

      【讨论】:

      • 要么我遗漏了一些东西,要么我的微风.js 不是最新的,但似乎收到了这个错误。 '无法加载组合模块(viewmodels/shell)。详细信息:LocalQueryComparisonOptions 未定义'顺便说一下,我在 durandal 中使用它。感谢您的超快速响应。
      • 对不起,应该是breeze.LocalQueryComparisionOptions。我更新了帖子。
      • 工作!!!起初没有用,但就像你说的,匹配数据库设置。所以我不得不从数据库中改变。顺便说一句,我正在使用 Oracle DB。惊人的!非常感谢朋友!
      • 如果有人在 Oracle DB 上遇到这个问题,我从 Jay 添加了上面的代码,然后修改了登录触发器以更改 DB 用户的会话变量。
      【解决方案3】:

      如果有人在 Oracle 数据库上遇到此问题,我添加了 Jay Traband 的上述代码,然后修改了登录触发器以更改数据库用户的会话变量。 设置以下值:

      更改会话集 nls_comp = 语言; ALTER SESSION SET nls_sort = binary_ci

      希望这可以帮助某人。我爱微风!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        • 1970-01-01
        • 2011-09-09
        相关资源
        最近更新 更多