是否可以从Sqlite查询返回动态对象或数据集?
我在我的Xamarin.Forms
应用程序中使用Sqlite.Net 。 到目前为止,如果我的对象是这样的类,那么返回对象列表非常棒:
SqliteDatabase.Connection.Query("Select * from Customers");
我现在想从查询中动态返回DataSet
的等价物
SqliteDatabase.Connection.Query("Select * from Customers inner join Calls on Customers.Id=Calls.CustomerId")
现在从第二个查询我想返回一个DataSet
而不是一个对象列表。 我知道我可以创建一个新的对象,它组合了Customers
和Calls
的列,但我不想每次想要查询数据库时都要创建对象。
是否可以动态返回Dataset
或Object
?
SQLite.NET PCL是围绕sqlite的.NET包装器。
因此,您可以通过在LINQ或Lambda中使用连接而不是在Query中查询类似于EF的查询。 包装器将为您处理转换为sqlite查询。
然后,您可以返回已连接类型或动态类型的新数据类型。
注意 :在sqlite中不直接支持连接( 更多信息 ), 这里提到了解决方法。
示例代码:
var conn = new SQLiteConnection(sqlitePlatform, "foofoo"); var query = from customer in conn.Table().ToList() join call in conn.Table().ToList() on customer.ID equals call.CustomerId select new { Customer = customer , Calls = call };
Lambda版本:
conn.Table().ToList().Join (conn.Table().ToList(), customer => customer.Id, call => call.CustomerId, (customer, call) => new { Customer = customer, Calls = call });
最后,我实际上设法提出了一个方法,它将运行任何查询并将行作为列表中的项返回,并将列作为数组中的对象返回:
public List
非常感谢user1! 工作完美。 这里只是一个如何使用ur方法的例子:
var objects = mySQLiteConnection.RunSql("SELECT * FROM Persons", true); // ColumnNames List ColumnNames = new List (); for (int column = 0; column < objects[0].Length; column++) { if (objects[0][column] != null) spaltennamen.Add((string)objects[0][column]); } // RowValues for (int row = 1; row < objects.Count; row++) { for (int column = 0; column < objects[row].Length; column++) { if (objects[row][column] != null) System.Diagnostics.Debug.WriteLine(spaltennamen[column] + " : " + objects[row][column]); } }
听起来你想要做的就是重新创建ADO.NET。 当你说“DataSet”时,我猜你在谈论ADO.NET。 这可能意味着您不希望使用SQLite.Net库中内置的ORMfunction。
我创建了这个版本的库,允许您从SQLite数据库中进行平面表读取。 这意味着您可以根据需要将数据读入ADO.NET数据集。