C# 如何将Foreach循环转换为Linq(在datagridview中)
我尝试了以下操作,但出现了错误 林克:C# 如何将Foreach循环转换为Linq(在datagridview中),c#,asp.net,linq,C#,Asp.net,Linq,我尝试了以下操作,但出现了错误 林克: foreach (GridViewRow row in gridView.Rows) { // Access the CheckBox CheckBox cb = (CheckBox)row.FindControl("SuburbSelector"); if (cb.Checked) { //do something; } } var Str=SuburbGridView.Rows.Cast()。其中(r
foreach (GridViewRow row in gridView.Rows)
{ // Access the CheckBox
CheckBox cb = (CheckBox)row.FindControl("SuburbSelector");
if (cb.Checked)
{
//do something;
}
}
var Str=SuburbGridView.Rows.Cast()。其中(r=>(复选框)r.FindControl(“SuburbSelector”)==checked);
错误:
委托“System.Func非常感谢您需要的是
而不是=
结尾:
var Str = SuburbGridView.Rows.Cast<GridViewRow>().Where(r=>(CheckBox)r.FindControl("SuburbSelector")==checked);
var Str=SuburbGridView.Rows.Cast()
其中(r=>((复选框)r.FindControl(“郊区选择器”))。选中);
我不能确定这是唯一的错误,因为您没有指出您遇到了什么错误。我认为这应该可以:
var Str = SuburbGridView.Rows.Cast<GridViewRow>()
.Where(r=>((CheckBox)r.FindControl("SuburbSelector")).checked);
var result=SuburbGridView.Rows.Cast()。其中(r=>((复选框)r.FindControl(“SuburbSelector”)。选中);
您遇到了什么错误?Linq似乎没有一个好的“每个”聚合。有一个
Aggregate()
,如果我没有实际积累任何东西,我就不喜欢它,因为累加器值基本上被丢弃了。我认为没有任何东西可以与List.ForEach()
等同,这是一种耻辱。如果您使用的是C#4.0,并且不介意并行处理,那么可以使用.aspallel().ForAll()
。总之,这里有一些方法可以满足您的需求:
使用List.ForEach()
:
由于操作顺序的原因,这不起作用。选中的.Checked
在转换为复选框之前进行评估,这意味着您正试图访问控件的复选框
属性,但该属性不存在。额外的一对帕伦解决了这个问题
// Doesn't work
(CheckBox)row.FindControl("someCheckbox").Checked
最后一件事,在比较中不需要做==true
<代码>已选中
已经是布尔值。如果你为了清晰而喜欢它(有些人喜欢),那就一定要保留它。这并不被认为是不好的做法或任何东西,这只是一个偏好问题。Delegate'System.Func'不接受1个参数。如果您需要cast SuburbGridView.Rows.cast(),行不是已经可以计算了吗?此外,您还应该注意FindControl返回时的null或控件命名错误时的静态强制转换异常。不幸的是,GridView.Rows
的类型是GridViewRowCollection
,它只实现IEnumerable
(非泛型),而不是IEnumerable
,因此无法自动计算类型参数。
SuburbGridView.Rows.Cast<GridViewRow>().Where(
r => ((CheckBox)r.FindControl("SuburbSelector")).Checked).ToList().ForEach(row =>
{
Response.Write(row.ID);
// Do something
});
SuburbGridView.Rows.Cast<GridViewRow>().Where(
r => ((CheckBox)r.FindControl("SuburbSelector")).Checked).AsParallel().ForAll(row =>
{
Response.Write(row.ID);
// Do something
});
// Doesn't work
(CheckBox)row.FindControl("someCheckbox").Checked
// Works
((CheckBox)row.FindControl("someCheckbox")).Checked