如何重写代码实现将匿名类型绑定到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
相关产品推荐
相关产品推荐

