Vin*_*pin 2 c# linq select filter where
如何使用Linq将其缩短?
int id = 0;
foreach (DataRow dr in tableClientTableAdapter1.GetData())
{
if (dr[0].ToString() == txtClientName.Text)
{
id = Convert.ToInt16(dr[1]);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我试过用这个
var a = tableClientTableAdapter1.GetData().Cast<DataRow>().Where(cName => cName[0].ToString() == txtClientName.Text);
MessageBox.Show(a[1].ToString());
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
错误1无法将带有[]的索引应用于类型为'System.Data.EnumerableRowCollection'的表达式C:\ Users\vrynxzent@yahoo.com\Desktop [最终] [GlobalTek]监控系统[GlobalTek]监控系统\ xfrmProjectAwarding.cs 89 37 [GlobalTek]监测系统
任何帮助!!
var a =是您尝试将其视为单个对象的一系列 DataRow项.如果您需要一个结果,请使用其中一个
.First()
.FirstOrDefault()
.Single()
.SingleOrDefault()
Run Code Online (Sandbox Code Playgroud)
在查询上,差异是您对结果的期望.如果可以存在多个项目,但您只对第一个项目感兴趣,请继续First().如果只有一个项目应该匹配,并且如果有更多的这是一个错误,一起去Single().如果在任一情况下,可能没有匹配项,请使用适当的*OrDefault()版本.
var row = tableClientTableAdapter1.GetData().
Cast<DataRow>()
.Where(cName => cName[0].ToString() == txtClientName.Text)
.FirstOrDefault();
if (row != null)
{
// extract value
}
Run Code Online (Sandbox Code Playgroud)