从数据表中选择特定的行

时间:2019-03-04 21:04:41

标签: c#

所以我有一个数据表,我使用linq来获取特定的行,然后我想遍历该行。

var table = myTable.AsEnumerable();
var myRow = table.Where(x => x.Field<int>("Year") == 2018);

 foreach (DataRow row in myRow.Table.Rows)
 {
     //print row 
 }

但是,看来myRow仍然包含所有行。我如何只获取应该从该linq查询中得到的特定行并对其进行循环?我想我想要的是结果行的数组。结果行包含不同类型的组合,包括字符串,整数和小数。

我尝试过

DataRow myRow2 = table.FirstOrDefault();

结果还是一样。

2 个答案:

答案 0 :(得分:3)

实际上,您只需要foreach:

foreach (DataRow row in myRows)

获得查询结果后,访问表实际上指向未过滤的表,并返回与之关联的所有行。

答案 1 :(得分:1)

您应该遍历Where的结果。
Where返回一个可枚举的DataRow(s),因此复数形式更合适。

var myRows = table.Where(x => x.Field<int>("Year") == 2018);
foreach (DataRow row in myRows)
{
    //print row 
}

这里也不过滤当前表,因此您的代码遍历整个行集合。

获取经过过滤的行集的另一种方法是通过Select native方法。不确定哪种性能更好。

var myRows = table.Select("Year = 2018");
foreach (DataRow row in myRow.Table.Rows)
{
   //print row 
}