5

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

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

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

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

4

3 回答 3

4

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

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

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

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

于 2014-10-06T14:34:47.797 回答
3

好的,这有两个部分。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 对象。

希望这是有道理的。

于 2013-11-15T00:43:14.940 回答
1

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

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

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

于 2013-11-15T18:52:57.740 回答