所以我有一个数据表,我使用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();
结果还是一样。
答案 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
}