LINQ表达式C#中的条件
本文关键字:条件 表达式 LINQ | 更新日期: 2023-09-27 18:21:12
我是LINQ的初学者。我正试图使用我在Stack Overflow上找到的LINQ表达式创建一个CSV文件:
var sb = new StringBuilder();
var headers = dgvDonnees.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => "'"" + column.HeaderText + "'"").ToArray()));
foreach (DataGridViewRow row in dgvDonnees.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "'"" + cell.Value + "'"").ToArray()));
}
我想把这个简单的条件添加到foreach循环中:(我在for循环中使用这个条件)
if (Convert.ToInt32(dgvDonnees.Rows[i].Cells[10].Value) == 0) continue;
我希望第10个单元格不为零的行出现在最终CSV中。
我该怎么做?非常感谢。
如果你真的想要一个LINQ解决方案,正如你的问题所暗示的那样,你会想要这样做:
foreach (DataGridViewRow row in dgvDonnees.Rows
.Where(r => Convert.ToInt32(r.Cells[10].Value) != 0))
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "'"" + cell.Value + "'"").ToArray()));
}
换句话说,让LINQ为您进行过滤,而不是在循环体中添加额外的语句。它更简洁,也更正确地反映了您正在寻找的语义(即,代码看起来更像您的规范"我想要第10个单元格不为零的行",而在循环中使用continue
需要与规范实际内容相反的逻辑表达式)。
只需在foreach
循环的开头放一行:
if (Convert.ToInt32(row.Cells[10].Value) == 0) continue;
row
替换您的dgDonnees.Rows[i]
最后你会有这个代码:
foreach (DataGridViewRow row in dgvDonnees.Rows)
{
if (Convert.ToInt32(row.Cells[10].Value) == 0) continue;
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => "'"" + cell.Value + "'"").ToArray()));
}