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

C# 如何在LINQ的Select子句中添加条件,根据WinForm复选框状态控制字段显示

问题原因

  1. LINQ 投影表达式中不能直接使用if语句作为值返回,需要使用C#三元条件运算符?:实现条件判断。
  2. WinForm 的CheckBox控件的勾选状态属性是Checked(首字母大写),你代码中写的小写checked会报编译错误。

正确实现代码

推荐使用多行lambda写法,提前提取公共值避免重复读取单元格,可读性和性能都更好:

var lstInfo = grdBreakDown.Rows.Cast<DataGridViewRow>()
    .Where(x => !x.IsNewRow)
    .Select(x => 
    {
        string tag = x.Cells["tag"].Value.ToString();
        string scheme = x.Cells["Scheme"].Value.ToString();
        string value = x.Cells["Value"].Value.ToString();
        // 校验当前Scheme对应的复选框是否勾选
        bool isShow = (scheme == "Master" && cbxMaster.Checked) 
                    || (scheme == "Admin" && cbxAdmin.Checked);
        return (
            tag: tag,
            Scheme: isShow ? scheme : string.Empty,
            Value: isShow ? value : string.Empty
        );
    })
    .Distinct()
    .ToList();

// 绑定ListView逻辑无需修改
lvwInfo.Items.AddRange( lstInfo
    .Select(x => new ListViewItem(new string[] { x.tag, x.Scheme, x.Value }))
    .ToArray()
);

如果你偏好和你原有写法更接近的单行表达式写法,也可以使用如下实现:

.Select(x => (
    tag: x.Cells["tag"].Value.ToString(),
    Scheme: ((x.Cells["Scheme"].Value.ToString() == "Master" && !cbxMaster.Checked) || (x.Cells["Scheme"].Value.ToString() == "Admin" && !cbxAdmin.Checked)) ? "" : x.Cells["Scheme"].Value.ToString(),
    Value: ((x.Cells["Scheme"].Value.ToString() == "Master" && !cbxMaster.Checked) || (x.Cells["Scheme"].Value.ToString() == "Admin" && !cbxAdmin.Checked)) ? "" : x.Cells["Value"].Value.ToString()
))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:01