如何在DataTable对象上执行复杂的SQL查询?

时间:2015-06-27 14:34:30

标签: c# sql excel datatable in-memory-database

我在C#中编写Excel加载项,我处理不同DataTable对象中包含的数据。我想提供一个函数来对数据执行SQL查询,并能够从where和sort by子句中引用其他表中的数据(例如,使用连接)。

此类查询的一个示例是

SELECT name
FROM Table1
WHERE id = Table2.id AND Table2.age > 18

问题在于DataTable不知道其他DataTable的存在,所以(至今我知道)在课堂上没有这样的方法。另外,我不能使用像LINQ这样的东西,因为查询将由excel中加载项的用户编写。

将数据复制到内存数据库是否是一个很好的解决方案,其中每个DataTable都映射到一个表?这将如何在性能方面发挥作用?有更简单的解决方案吗?

1 个答案:

答案 0 :(得分:0)

就SQL查询而言,在选择表时缺少表引用,更正后的查询将如下所示

SELECT name
FROM Table1, Table2
WHERE Table1.id = Table2.id AND Table2.age > 18

如果Table1.name中有相同的命名属性,请使用Table2。 但是,建议不要在连接中仅使用WHERE条件而不指定连接属性read this question。使用JOIN

SELECT Table1.name
    FROM Table1 INNER JOIN Table2 ON Table1.id = Table2.id WHERE Table2.age > 18