首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C#中linq的选择中加入一个条件

如何在C#中linq的选择中加入一个条件
EN

Stack Overflow用户
提问于 2021-11-07 23:35:18
回答 3查看 258关注 0票数 1

我想从LINQ中选择值

但这些值依赖于C#中windows窗体中的另一个控件。

这是我的密码

代码语言:javascript
运行
复制
var lstInfo = grdBreakDown.Rows.Cast<DataGridViewRow>()
    .Where(x => !x.IsNewRow)
    .Select(x => (tag: x.Cells["tag"].Value.ToString(), Scheme: x.Cells["Scheme"].Value.ToString(), Value: x.Cells["Value"].Value.ToString()))
    .Distinct()
    .ToList();

lvwInfo.Items.AddRange( lstInfo
    .Select(x => new ListViewItem(new string[] { x.tag, x.Scheme, x.Value }))
    .ToArray()
);

这段代码工作得很完美,并显示了所有类似这样的方案

代码语言:javascript
运行
复制
    Tag  Scheme  Value
    Red  Master  88
    Red  Master  14
    Red  Admin   39
    Red  Admin   31
    Blue Master  91
    Blue Master  10
    Blue Admin   54
    Blue Admin   04

但是,我想做一些更改,只在windows窗体中的复选框被勾选时显示方案&值,如果没有,只显示空字符串。

像这样的东西

代码语言:javascript
运行
复制
    .Select(x => (
        tag: x.Cells["tag"].Value.ToString(),
        Scheme:
            if(
                (!cbxMaster.checked &&  x.Cells["Scheme"].Value.ToString() == "Master")
                ||
                (!cbxAdmin.checked &&  x.Cells["Scheme"].Value.ToString() == "Admin"), "", x.Cells["Scheme"].Value.ToString()
            ),
        Value:
            if((!cbxMaster.checked &&  x.Cells["Scheme"].Value.ToString() == "Master")
                ||
                (!cbxAdmin.checked &&  x.Cells["Scheme"].Value.ToString() == "Admin"), "", x.Cells["Value"].Value.ToString()
            )
    )

所以,如果师父滴答一声,管理就不会滴答滴答

输出将是这样的

代码语言:javascript
运行
复制
    Tag  Scheme  Value
    Red  Master  88
    Red  Master  14
    Red     
    Blue Master  91
    Blue Master  10
    Blue 

但这不管用。

怎么和linq做这件事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-08 00:16:10

要修改所选内容,必须浏览整个选择。

代码语言:javascript
运行
复制
var lstInfo = grdBreakDown.Rows.Cast<DataGridViewRow>()
                               .Where(x => !x.IsNewRow)
                               .Select(x => (tag: x.Cells["tag"].Value.ToString(), Scheme: x.Cells["Scheme"].Value.ToString(), Value: x.Cells["Value"].Value.ToString()))
                               .Distinct()
                               .ToList()
                               .foreach (elem=>{
                                     if(elem.Sheme.equals("Admin")){
                                         elem.Sheme="";
                                         elem.value="";}
                                });
票数 1
EN

Stack Overflow用户

发布于 2021-11-08 00:40:48

为什么不为您正在搜索的值尝试一个条件运算符?

代码语言:javascript
运行
复制
.Where(x => x.Cells["Scheme"].Value.ToString() == ((checked) ? "Master" : "Admin") )

选中的值可以是粗体值,也可以是滴答滴答。我想这会有用的

票数 1
EN

Stack Overflow用户

发布于 2021-11-08 07:41:24

定义问题

如果选中了相应的Admin控件,您可以将其转换为:获取Master和/或CheckBox行的值。否则,得到他们独特的标签。

因此:

代码语言:javascript
运行
复制
private void PopulateListView()
{
    // Local function...
    (string tag, string scheme, string value) GetItems(DataGridViewRow row) =>
        (chkAdmin.Checked && row.Cells["scheme"].Value.ToString() == "Admin") ||
        (chkMaster.Checked && row.Cells["scheme"].Value.ToString() == "Master")
        ? (
        row.Cells["tag"].Value.ToString(),
        row.Cells["scheme"].Value.ToString(),
        row.Cells["value"].Value.ToString())
        : (
        row.Cells["tag"].Value.ToString(),
        string.Empty,
        string.Empty);

    var lstInfo = dgv.Rows.Cast<DataGridViewRow>()
        .Where(x => !x.IsNewRow)
        .Select(x => GetItems(x))
        .Distinct()
        .Select(x => new[] { x.tag, x.scheme, x.value });

    lvwInfo.Items.Clear();
    lvwInfo.Items.AddRange(lstInfo.Select(x => new ListViewItem(x)).ToArray());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69877329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档