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

本文关键字:复杂 SQL 查询 执行 对象 DataTable | 更新日期: 2023-09-27 18:00:09

我正在C#中编程一个Excel外接程序,在这里我处理不同DataTable对象中包含的数据。我想提供一个函数来对数据执行SQL查询,能够在where中引用其他表中的数据并按子句排序(例如,使用联接)。

这种查询的一个例子是

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

这样做的问题是DataTable不知道其他DataTable的存在,所以(据我所知)类中没有这样的方法。此外,我不能使用类似LINQ的东西,因为查询将由excel中加载项的用户编写。

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

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

就SQL查询而言,在选择表时缺少表引用,更正后的查询看起来像

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

如果Table2中有相同的命名属性,则使用Table1.name。但是,不建议在Joins中仅使用WHERE条件而不指定联接属性来阅读此问题。使用JOIN

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