【问题标题】:How to perform a complex SQL query on DataTable objects?如何对 DataTable 对象执行复杂的 SQL 查询?
【发布时间】:2015-06-27 14:34:29
【问题描述】:

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

这样的查询的一个例子是

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

这个问题是DataTable 不知道另一个DataTables 的存在,所以(到目前为止我知道)类中没有这样的方法。另外,我不能使用 LINQ 之类的东西,因为查询将由加载项的用户在 excel 中编写。

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

【问题讨论】:

  • SQL 查询总是返回一个平面表,因此永远不会存在其他表。要么您需要在 SQL 查询中使用连接来组合表,要么您已经执行的查询有一个公共字段,您可以使用 Linq 来连接。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2012-04-22
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2015-03-02
    • 2019-07-30
    相关资源
    最近更新 更多