2

假设我有一个 DataTable (myDatable),其第一行是一行标题,其后续行只是数字数据。例如:

    | WaterPercent | Ethylene | Toluene |
    |1.0312345     | 74.1323  | 234.000 |
    |56.054657     | 18.6540  | 234.000 |
    |37.57000      | 94.6540  | 425.000 |

此时,它的所有数据都包含在其myDataTable.ColumnsmyDataTable.RowsStrings

使用此查询:

var results = from row in myDataTable.AsEnumerable()
              select row.Field<string>("Ethylene");

我可以获取 Ethylene 列中的所有值,但我想使用“where”子句过滤我的查询,这样我就可以在特定行索引和“Ethylene”之类的列的交集处仅检索一个值。

因此,它看起来不像(除非我遗漏了什么)我可以row在 Linq 查询中使用 ' ' 访问行集合的索引。即使我有这个,我也不确定如何形成我的查询的“where”子句来获得我想要的东西。

我的查询需要什么才能将结果过滤到特定行和列的交集?

例如,我想要值 18.6540,它存在于 2 的行索引和 Ethylene 的列中。

4

2 回答 2

3

如果您知道特定的行索引,那么您可以直接使用.Rows集合指定行索引,就像您索引数组或集合一样(因为它是基于 0 的索引,所以第 2 行将是 index 1):

var result = myDataTable.Rows[1].Field<String>("Ethylene")
于 2013-04-17T21:14:51.173 回答
1

您是否有理由在结果中不这样做?

var results = (from row in myDataTable.AsEnumerable()
          select row.Field<string>("Ethylene")).ToArray();

然后只是索引

var myVal = results[2];

否则,您将需要使用 Skip() 和 Take()。

String result = (from row in myDataTable.AsEnumerable()
              select row.Field<string>("Ethylene")).Skip(2).Take(1).Single();
于 2013-04-17T21:20:13.633 回答