You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站汽车价格区间筛选实现及筛选异常问题咨询

汽车价格区间筛选异常问题排查与修复

问题现象

设置最低价=100,000、最高价=150,000时,筛选结果出现价格超出区间的车辆,同时当前逻辑无法处理仅填写单一价格参数的场景。

核心问题分析

前端侧

用户输入的价格带千分位逗号(如100,000),前端未做处理直接将带逗号的字符串传给后端,导致后端解析decimal时失败,过滤逻辑未生效。

后端侧

  1. 千分位解析失败:默认decimal.TryParse不支持带千分符的字符串,导致fromPrice和toPrice解析失败,if条件不满足,过滤逻辑未执行。
  2. 单一参数场景未处理:仅当两个价格都解析成功时才执行过滤,用户只填最低价或最高价时逻辑失效。
  3. 重复解析性能差:在Where中每次循环都调用decimal.Parse(c.price),既影响性能,也存在格式错误风险。

修复方案

前端代码修改

处理输入值中的千分位逗号,转换为纯数字字符串后再传入后端:

onInputChange(event: any, field: string): void {
  // 移除输入值中的所有逗号,保留纯数字格式
  const cleanValue = event.target.value.replace(/,/g, '');
  this.filter[field] = cleanValue;
}

后端代码修改

支持千分位解析,同时处理单一价格参数的筛选逻辑:

// 需要引入命名空间:using System.Globalization;
case "price":
  var fromPriceString = filters.FirstOrDefault(f => f.Key == "FromPrice")?.Value;
  var toPriceString = filters.FirstOrDefault(f => f.Key == "ToPrice")?.Value;

  // 解析最低价,允许千分位和浮点格式
  var hasFromPrice = decimal.TryParse(
      fromPriceString, 
      NumberStyles.AllowThousands | NumberStyles.Float, 
      CultureInfo.InvariantCulture, 
      out var fromPrice
  );
  // 解析最高价,允许千分位和浮点格式
  var hasToPrice = decimal.TryParse(
      toPriceString, 
      NumberStyles.AllowThousands | NumberStyles.Float, 
      CultureInfo.InvariantCulture, 
      out var toPrice
  );

  // 分别处理最低价、最高价的筛选条件
  if (hasFromPrice)
  {
      query = query.Where(c => decimal.Parse(c.price, NumberStyles.AllowThousands) >= fromPrice);
  }
  if (hasToPrice)
  {
      query = query.Where(c => decimal.Parse(c.price, NumberStyles.AllowThousands) <= toPrice);
  }
  break;

优化建议

数据库字段优化:将c.price的存储类型从字符串改为decimal,彻底避免字符串解析带来的性能问题和格式错误风险,同时简化过滤逻辑。

内容的提问来源于stack exchange,提问作者Ali Zain Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:27:20