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

如何重写代码实现将匿名类型绑定到ListBox控件

问题分析

你原代码的核心问题是groups变量在if/else的块级作用域内声明,块外无法访问,会直接触发编译错误,同时重复的Select和Distinct逻辑可以合并简化。

重写后代码(与原逻辑完全对齐)

var groups = usersData
    .Where(g => 
        categoryId == null 
            ? g.groupName != null 
            : g.categoryId == Convert.ToInt32(categoryId)
    )
    .Select(g => new { groupId = g.groupId, groupName = g.groupName })
    .Distinct();

lstGroups.DataValueField = "groupId";
lstGroups.DataTextField = "groupName";
lstGroups.DataSource = groups; 
lstGroups.DataBind();

可选优化(建议)

如果你希望无论categoryId是否为空,都只返回groupName不为空的分组,可以调整过滤条件如下,逻辑更统一:

var groups = usersData
    .Where(g => 
        g.groupName != null 
        && (categoryId == null || g.categoryId == Convert.ToInt32(categoryId))
    )
    .Select(g => new { groupId = g.groupId, groupName = g.groupName })
    .Distinct();

优化说明

  • 把分支判断合并到Where条件中,消除冗余的重复查询逻辑,代码更简洁易维护
  • groups变量现在声明在全局作用域,后续绑定数据源可以正常访问
  • 保留了你需要的groupId和groupName匿名类结构,完全匹配ListBox的字段设置要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:54:03