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

如何利用多选下拉框组合值筛选数据源记录

解决多选下拉框筛选Farmers数据的问题

问题分析

原代码的核心问题是循环中每次直接覆盖result变量,导致多选时只有最后一个选中项的筛选生效;同时存在笔误(Logistics分支错误判断了ProductError)。我们需要动态叠加筛选条件,确保所有选中部门对应的Error字段都非空。

优化实现思路

  1. 将选中的下拉字符串转换为DropdownEnum枚举集合,避免字符串硬编码判断
  2. 为每个选中的枚举项,添加对应的Error字段非空的筛选条件
  3. 一次性对数据源应用所有筛选条件,得到符合要求的结果

修改后的完整代码

internal class Program
{
    static void Main(string[] args)
    {
        // 模拟用户选中的下拉值
        string dropdownSelected = "1,2";
        var result = new List<Farmers>();

        // 1. 解析选中的下拉值为DropdownEnum集合
        var selectedEnums = dropdownSelected.Split(',')
                                           .Select(s => (DropdownEnum)int.Parse(s))
                                           .ToList();

        // 2. 获取数据源(只调用一次,避免重复查询)
        var farmers = farmerList();

        // 3. 动态构建筛选条件
        IQueryable<Farmers> query = farmers.AsQueryable();
        foreach (var selected in selectedEnums)
        {
            switch (selected)
            {
                case DropdownEnum.Production:
                    query = query.Where(x => x.ProductError != null);
                    break;
                case DropdownEnum.Shipping:
                    query = query.Where(x => x.ShippingError != null);
                    break;
                case DropdownEnum.Logistics:
                    query = query.Where(x => x.LogisticError != null);
                    break;
            }
        }

        // 4. 执行筛选得到结果
        result = query.ToList();

        // 输出结果验证(可选)
        foreach (var item in result)
        {
            Console.WriteLine($"ID: {item.ID}, Name: {item.Name}");
        }
    }

    public static List<Farmers> farmerList()
    {
        List<Farmers> farmers = new List<Farmers> 
        {
            new Farmers {ID = 1, Name = "Item1", ProductError = 1, ShippingError = 1, LogisticError = 2},
            new Farmers {ID = 2, Name = "Item2", ProductError = null, ShippingError = 3, LogisticError = 2},
            new Farmers {ID = 3, Name = "Item3", ProductError = null, ShippingError = null, LogisticError = null},
            new Farmers {ID = 4, Name = "Item4", ProductError = null, ShippingError = null, LogisticError = null},
            new Farmers {ID = 5, Name = "Item5", ProductError = 1, ShippingError = null, LogisticError = null},
            new Farmers {ID = 6, Name = "Item6", ProductError = 1, ShippingError = null, LogisticError = null},
            new Farmers {ID = 7, Name = "Item7", ProductError = 3, ShippingError = null, LogisticError =4},
            new Farmers {ID = 8, Name = "Item8", ProductError = null, ShippingError = 5, LogisticError = 5}
        };
      
        return farmers;
    }
}

public enum DropdownEnum
{
    Production = 1,
    Shipping = 2,
    Logistics = 3,
}

public class Farmers
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    public double? LogisticError { get; set; }
    public int? ProductError { get; set; }
    public int? ShippingError { get; set; }
}

关键改进点

  • 避免重复查询数据源:只调用一次farmerList(),提升性能
  • 动态叠加筛选条件:通过IQueryable逐步添加Where条件,确保所有选中项的判断都生效
  • 类型安全的枚举解析:将字符串转换为枚举类型,减少硬编码错误
  • 修正笔误:Logistics分支正确判断LogisticError字段

效果验证

  • 选中1(Production):返回Item1、Item5、Item6、Item7
  • 选中1,2(Production+Shipping):只返回Item1(同时满足ProductError和ShippingError非空)
  • 选中1,2,3:只返回Item1(三个Error字段都非空)

内容的提问来源于stack exchange,提问作者user3920526

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:00:07