查询数据表中行和列交集处的特定值

本文关键字:数据表 查询 | 更新日期: 2023-09-27 18:09:37

假设我有一个数据表(mydatatable),其第一行是一行标题,其后续行是简单的数字数据。例如:

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

此时,它的myDataTable.ColumnsmyDataTable.Rows中包含的所有数据都是Strings

使用这个查询:

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

我可以得到乙烯列中的所有值,但是我想用"where"子句过滤我的查询,这样我就可以在特定的行索引和像"乙烯"这样的列的交叉处检索一个值。

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

我需要什么来让我的查询能够过滤到特定行和列的交集?

例如,我想要值18.6540,它存在于行索引2和乙烯列。

查询数据表中行和列交集处的特定值

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

var result = myDataTable.Rows[1].Field<String>("Ethylene")

在结果中不这样做是有原因的吗?

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();