【问题标题】:Run SQL Queries on DataTables, or similar, in .Net, without an RDBMS在 .Net 中对 DataTables 或类似内容运行 SQL 查询,无需 RDBMS
【发布时间】:2011-03-01 20:55:50
【问题描述】:

我想要一个数据集或数据表,并且能够在它们上运行 SQL 语句,而无需使用任何外部 RDBMS。

例如,在一个数据集中获取 2 个数据表,然后使用 SQL 语句和 Where 子句直接连接它们,结果是一个新的数据表?例如,如果我有 2 个数据表,在数据集中名为 People 和 Addresses(我使用代码构建,而不是从数据库中获取 .. 请原谅老式的 Join 语法):

dim dtJoined as DataTable = MyDataSet.RunSQLQuery ("Select * from People, Orders Where People.PersonID=Orders.OrdereID")

谢谢

【问题讨论】:

    标签: c# .net sql vb.net dataset


    【解决方案1】:

    您将无法针对它运行 SQL,因为它不是 RDBMS,但您可能可以使用标准 LINQ 获得您想要完成的任务。

    【讨论】:

      【解决方案2】:

      它不是sql,但如果您想查询数据集并数据标注您的最佳选择是使用LINQ to DataSet

      【讨论】:

      • lazy stress>效率很好,而且不必学习新的查询语言的所有细节,但我想LINQ并不那么糟糕。 span>
      • 一旦开始使用它,您可能会发现它比SQL更好。最终,您可能希望完全放弃数据集方法,并使用 LINQ 查询强类型集合,甚至通过 LINQ to SQL/Entity Framework/NHibernate 等查询数据库。
      【解决方案3】:

      您可以将其写入临时 csv 文件并使用 OLEDB 读取它

      string strCSVConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
                  + fileDirectory + ";Extended Properties='text;HDR=YES;'";
      
      OleDbDataAdapter oleda = new OleDbDataAdapter(sql, strCSVConnString);
      DataTable dataTable = new DataTable();
      oleda.Fill(dataTable);
      

      这种情况下sql可以

      SELECT * FROM fileName WHERE col = value
      

      等等。我们在这方面取得了相当大的成功。

      【讨论】:

      • 太棒了!我终于得到了真正的答案。但是,我不得不承认,我一直将所有内容存储在轻量级类或结构的集合中——通常只有公共成员变量——并且使用 LINQ 甚至加入多个列表并不得不推荐它。有缺点 - 学习曲线是最大的,第二大是你不能编辑和继续(我有 2008 年) - 但现在我知道了,我太上瘾了,不能回去。注意:.Net 中有很多东西被添加来支持这个! Lambda、扩展方法等
      猜你喜欢
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多