BreezeJS Predicate:如何搜索多种数据类型
BreezeJS Predicate: how to search for multiple data types?
我有一个.NET服务器端类,它有多种数据类型,如string、int、decimal和Date。在客户端,我想搜索每一列,但Breeze谓词一次可以搜索1个数据类型。
公共分部类验证{
public Guid ValidationID { get; set; } (dont search for this field)
public int Integer { get; set; }
public string String { get; set; }
public DateTime? Date { get; set; }
public DateTime? BeforeDate { get; set; }
public DateTime? AfterDate { get; set; }
public int? Age { get; set; }
public decimal? CreditCard { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string URL { get; set; }
public string Zip { get; set; }
}
然后我尝试了
breeze.Predicate.或(predicate1,predicate2,Predicate 3)
但它返回了错误的请求。
然后我使用javascript检查结果数据是否返回0对象,我将搜索另一种类型(字符串,然后是数字,然后是日期)
问题1:有没有办法将Breeze数据转换为字符串,这样我就需要为所有字段指定一个谓词,只搜索字符串?
例如:微风。谓词.create('date'.toString(),'contains','09/15')
问题2:如果q1没有答案,有没有更好/体面的方法用Breeze搜索多个数据类型?
非常感谢您的回答!
您需要将每个谓词放在or中(只需将第一个谓词放在或中),并像下面这样连接它们:
var query = breeze.EntityQuery.from("Validation");
var predicate1 = breeze.Predicate.create("ValidationID", "contains", searchText);
var predicate2 = breeze.Predicate.create("Email", "contains", searchText);
query.where(predicate1.or(predicate2));
manager.executeQuery(query);
您将无法使用字符串运算符(如"startsWith"、"endsWith"或"contains")搜索非文本字段,同样,您也无法使用运算符(如"gt"或"lt")搜索字符串或布尔字段。这是因为EF(以及Mongo和其他ORM提供者)没有提供这样的服务器查询的底层支持。
您可以通过将谓词组合在一起来查询相同类型的所有字段:(类似于Sebastian的答案)。所以对于字符串,类似这样的东西:
var Predicate = breeze.Predicate;
var query = breeze.EntityQuery.from("Validation");
var searchText = 'findMe';
// Predicate.create works as well
var p1 = new Predicate("Email", "contains", searchText);
var p2 = new Predicate("Phone", "contains", searchText);
var p3 = new Predicate("Zip", "contains", searchText);
query.where(Predicate.or[ p1, p2, p3] );
日期:
searchDate = new Date(2014,0,1);
var p1 = new Predicate("BeforeDate", "==", searchDate);
var p2 = new Predicate("AfterDate", "==", searchDate);
query.where(Predicate.or[ p1, p2] );
您还可以在查询中使用任何适合数据类型的功能,即
var searchYear = 2014;
// Predicate.create works as well
var p1 = new Predicate("year(BeforeDate)", "==", searchYear);
var p2 = new Predicate("year(AfterDate)", "==", searchYear);
query.where(Predicate.or[ p1, p2] );
您也可以将不同类型的谓词"或"组合在一起,但显然不会使用相同的搜索"值"。不过,你也可以这样做。
var searchDate = new Date(2014,0,1);
var searchText = searchDate.toString();
// Predicate.create works as well
var p1 = new Predicate("Email", "contains", searchText);
var p2 = new Predicate("BeforeDate", "==", searchDate);
query.where(Predicate.or[ p1, p2] );
相关文章:
- javascript解释器如何理解变量的数据类型
- 从查询字符串参数推断出正确的数据类型
- 为什么不'我们在javascript中使用函数参数的数据类型
- 基于数据类型的编辑框的汇总列表
- 如何降低此函数的复杂性,该函数根据数据类型进行回调
- 比较和分配数据类型的困难
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- E4X中是否有一种方法可以将基元数据类型的XMLList转换为类似于Array.join()的Array
- Highcharts系列.数据数据类型限制
- 如何使用代码点火器使用Bootstarp数据表搜索数据嵌套表数据
- 如何在php循环中显示隐藏的数据类型
- 如何从标签数据类型=“;无线电”;
- 如何使用 Java 脚本从 csv 文件中查找每列的数据类型
- 在 Javascript 中更改数据类型
- 抽象数据类型等效于类型
- JavaScript中的“符号”原始数据类型是什么?
- 数据类型Jasmine
- 有没有一种方法可以在Typescript中自动检查数据类型的数据相等性
- 角度:搜索器(过滤器)根据数据类型工作不同
- BreezeJS Predicate:如何搜索多种数据类型