在c#中使用Linq选择DataRow

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]监测系统

任何帮助!!

Ant*_*ram 5

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)