如何在我的网站上实施价格过滤器以根据价格范围(“从价格”和“到价格”)过滤汽车?

问题描述 投票:0回答:1

即使我将价格范围设置为“起始价格”= 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
的情况。

c# .net angular asp.net-core-webapi
1个回答
0
投票

我还期望过滤器能够正确处理未提供 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;
© www.soinside.com 2019 - 2024. All rights reserved.