在没有RDBMS的情况下在.Net中的数据表或类似数据库上运行SQL查询

问题描述:

我想拥有一个或多个数据表,并且能够在它们上运行SQL语句,而无需使用任何外部RDBMS。在没有RDBMS的情况下在.Net中的数据表或类似数据库上运行SQL查询

例如,取一个数据集中的2个数据表,并直接将它们与SQL语句和Where子句结合起来,结果是一个新的数据表?例如,如果我有2个数据表,命名为人民和地址的数据集(我建立使用代码,而不是从数据库中获取..原谅老式加入语法):

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

感谢

它不是SQL,但是如果你要查询的数据集和数据表你最好的选择是使用LINQ to DataSet

+0

这将是很高兴成为懒惰高效,而不必学习新的查询语言的所有细节,但我想LINQ并没有那么糟糕。 – FastAl 2010-06-14 19:27:22

+2

一旦你开始使用它,你可能会发现它在许多方面比SQL更好。最终,您可能想要完全抛弃数据集方法,并使用LINQ通过LINQ to SQL/Entity Framework/NHibernate等查询强类型集合或甚至数据库。 – 2013-01-07 08:37:05

你因为它不是一个RDBMS,但你可能会使用标准的LINQ获得你想要完成的任务。

你可以写出来,以一个临时的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 

等我们已经有了相当数量的成功与此。

+0

太棒了!我终于得到了一个真正的答案。然而,我不得不承认,我一直将所有东西都存储在轻量级类或结构集合中 - 通常只使用公共成员变量 - 并使用LINQ甚至加入多个列表并且必须推荐它。有缺点 - 学习曲线最大,第二大是你不能编辑和继续(我有2008) - 但现在我知道它,并沉迷于回归。注意:在.Net中有一些TON是为了支持这个而添加的! Lambdas,扩展方法等 – FastAl 2013-01-07 15:40:30