我具有以下自动查询功能。
[Route("/cars/search")]
public class SearchCars : QueryDb<Car, CarDto>
{
public List<int> EquipmentIds { get; set; }
public List<int> ManufacturerIds { get; set; }
public List<int> ColourIds { get; set; }
}
当我执行以下操作时,该功能有效:
汽车/搜索?ColourIds = 1&format = json
汽车/搜索?ManufacturerIds = 1&format = json
但是当我尝试使用
汽车/搜索?EquipmentIds = 1&format = json
我得到“将varchar值'[1]'转换为数据类型int时转换失败。”。
这些字段之间的区别是Car对象可以具有多个EquipmentId,但只能有一个ColourId和ManufacturerId。
public class Car
{
[AutoIncrement]
public int Id { get; set; }
public Colour Colour { get; set; }
[Required]
public int ColourId { get; set; }
public Manufacturer Manufacturer { get; set; }
[Required]
public int ManufacturerId { get; set; }
[Required]
public List<Equipment> Equipment { get; set; }
[Required]
public List<int> EquipmentId { get; set; }
}
我是否也必须定义应为哪个属性分配不同的参数?
答案 0 :(得分:1)
AutoQuery通过基于implicit conventions构造RDBMS查询来工作,该查询用于构造在RDBMS上运行的SQL查询。
OrmLite数据模型中的复杂类型默认为blob,这意味着无法在带有SQL的RDBMS中查询它们,因此您将无法使用自动查询来查询它。
您可以创建一个混合Custom AutoQuery Implementation,您可以在其中应用任何自定义逻辑来过滤自动查询结果的结果,例如...
public class MyQueryServices : Service
{
public IAutoQueryDb AutoQuery { get; set; }
//Override with custom implementation
public object Any(SearchCars query)
{
var equipmentIds = query.EquipmentIds;
query.EquipmentIds = null;
var q = AutoQuery.CreateQuery(query, base.Request);
var response = AutoQuery.Execute(query, q);
if (equipmentIds != null)
response.Results.RemoveAll(x => x.EquipmentId...);
return response.
}
}