即使我将价格范围设置为“起始价格”= 100,000 和“终止价格”= 150,000,过滤器也会显示价格超出此范围的汽车。我怀疑价格过滤的应用方式可能存在问题,或者数据可能无法正确解析或比较。
前端实现:
onInputChange(event: any, field: string): void {
this.filter[field] = event.target.value;
}
applyFilter() {
this.filter['car_type'] = "17";
const requestPayload = { Filter: this.filter };
this.Service.getfiltercar(requestPayload).subscribe(
{
next: (response: any) => {
this.newcar = response
},
error: (error: any) => {
console.error('There was an error!', error);
}
});
}
后端实现:
case "price":
var fromPriceString = filters.FirstOrDefault(f => f.Key == "FromPrice").Value;
var toPriceString = filters.FirstOrDefault(f => f.Key == "ToPrice").Value;
if (decimal.TryParse(fromPriceString, out var fromPrice) && decimal.TryParse(toPriceString, out var toPrice))
{
query = query.Where(c => decimal.Parse(c.price) >= fromPrice && decimal.Parse(c.price) <= toPrice);
}
break;
我预计过滤器将仅正确显示价格在
FromPrice
和 ToPrice
指定范围内的汽车。
我还期望过滤器能够正确处理未提供
FromPrice
或 ToPrice
的情况。
我还期望过滤器能够正确处理未提供 FromPrice 或 ToPrice 的情况。
不会,空表单字段要么为空,要么为空字符串,两者都不会转换为十进制。
假设
query
是 IQuertable<TEnity>
那么您可以增量构建查询:
if (decimal.TryParse(fromPriceString, out var fromPrice) {
query = query.Where(x => x.Price >= fromPrice;
}
if (decimal.TryParse(toPriceString, out var toPrice) {
query = query.Where(x => x.Price <= toPrice;
}
另一种方法是有一个默认值:
var fromPrice = decimal.TryParse(fromPriceString, out var p)
? p
: DefaultFromPrice;