查询DataTable中Row和Column交叉处的特定值

时间:2013-04-17 21:10:52

标签: c# linq

假设我有一个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.Rows中包含的所有数据均为Strings

使用此查询:

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

我可以获取Ethylene列中的所有值,但是我想用“where”子句过滤我的查询,这样我就可以在特定行索引和列之间检索一个值,如“Ethylene” ”

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

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

例如,我想要在行索引为2和乙烯列时存在的值18.6540。

2 个答案:

答案 0 :(得分:3)

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

1

答案 1 :(得分: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();