我正在使用微风从服务器查询数据,似乎遇到了问题。有没有办法过滤这些数据并忽略大小写或使字段中的值小写?例子:
var term = "john";
query = query.where("Name", "contains", Term);
我遇到的问题是,如果“姓名”字段包含大写字母“J”的约翰,它返回 false,但如果我将术语更改为“约翰”则返回 true。我知道这是案例问题,但我怎样才能让微风忽略外壳?不使用 jquery.each。
谢谢。任何帮助将不胜感激。
我正在使用微风从服务器查询数据,似乎遇到了问题。有没有办法过滤这些数据并忽略大小写或使字段中的值小写?例子:
var term = "john";
query = query.where("Name", "contains", Term);
我遇到的问题是,如果“姓名”字段包含大写字母“J”的约翰,它返回 false,但如果我将术语更改为“约翰”则返回 true。我知道这是案例问题,但我怎样才能让微风忽略外壳?不使用 jquery.each。
谢谢。任何帮助将不胜感激。
在我看来,有一种更简单的方法。
默认情况下,OData 区分大小写,但仍然提供将字符串转换为小写或大写的函数。因此,要向服务器发起不区分大小写的查询,只需按如下方式修改您的代码:
var term = "john";
query = query.where("tolower(Name)", breeze.FilterQueryOp.Contains, term.toLowerCase());
因此,OData 被告知在将其与您的搜索字符串进行比较之前将其转换为小写,在将其发送到服务器之前已将其转换为小写。
好的,这有两个部分。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 对象。
希望这是有道理的。
如果有人在 Oracle DB 上遇到这个问题,我从 Jay Traband 添加了上面的代码,然后修改了登录触发器以更改 DB 用户的会话变量。设置以下值:
更改会话集 nls_comp = 语言;更改会话集 nls_sort = binary_ci
希望这可以帮助某人。我爱微风!!!