我想从LINQ中选择值
但这些值依赖于C#中windows窗体中的另一个控件。
这是我的密码
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()
);
这段代码工作得很完美,并显示了所有类似这样的方案
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窗体中的复选框被勾选时显示方案&值,如果没有,只显示空字符串。
像这样的东西
.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()
)
)
所以,如果师父滴答一声,管理就不会滴答滴答
输出将是这样的
Tag Scheme Value
Red Master 88
Red Master 14
Red
Blue Master 91
Blue Master 10
Blue
但这不管用。
怎么和linq做这件事?
发布于 2021-11-08 00:16:10
要修改所选内容,必须浏览整个选择。
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="";}
});
发布于 2021-11-08 00:40:48
为什么不为您正在搜索的值尝试一个条件运算符?
.Where(x => x.Cells["Scheme"].Value.ToString() == ((checked) ? "Master" : "Admin") )
选中的值可以是粗体值,也可以是滴答滴答。我想这会有用的
发布于 2021-11-08 07:41:24
定义问题
如果选中了相应的Admin
控件,您可以将其转换为:获取Master
和/或CheckBox
行的值。否则,得到他们独特的标签。
因此:
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());
}
https://stackoverflow.com/questions/69877329
复制相似问题