是否可以从Sqlite查询返回动态对象或数据集? [英] Is it possible to return dynamic objects or Dataset from a Sqlite Query?
问题描述
我在<$ c $中使用 Sqlite.Net c> Xamarin.Forms 应用程序。到目前为止,如果我的对象是这样的类,返回对象列表将非常有用:
I am using Sqlite.Net in my Xamarin.Forms
application. So far it has been great at returning lists of objects if my object is a class like so:
SqliteDatabase.Connection.Query<Customer>("Select * from Customers");
我现在想动态返回 DataSet
的等价物从我的查询中
I would now like to return the equivalent of a DataSet
dynamically from my query
SqliteDatabase.Connection.Query("Select * from Customers inner join Calls on Customers.Id=Calls.CustomerId")
现在从第二个查询中我想返回一个 DataSet
而不是对象列表。我知道我可以创建一个合并了 Customers
和 Calls
列的新对象,但是我不想拥有每次我想查询数据库时都会创建对象。
Now from the second query I would like to return a DataSet
instead of a list of objects. I know I could create a new object which combines the columns of Customers
and Calls
but I don't want to have to create objects every time I want to query the database.
是否可以动态返回 Dataset
或 Object
?
推荐答案
最后,我实际上设法提出了一种方法运行任何查询,并将行作为列表中的项返回,将列作为数组中的对象返回:
In the end I actually managed to come up with a method that will run any query and return the rows as items in the list and the columns as objects in the array:
public List<object[]> RunSql(string sqlString, bool includeColumnNamesAsFirstRow)
{
var lstRes = new List<object[]>();
SQLitePCL.sqlite3_stmt stQuery = null;
try
{
stQuery = SQLite3.Prepare2(fieldStrikeDatabase.Connection.Handle, sqlString);
var colLenght = SQLite3.ColumnCount(stQuery);
if (includeColumnNamesAsFirstRow)
{
var obj = new object[colLenght];
lstRes.Add(obj);
for (int i = 0; i < colLenght; i++)
{
obj[i] = SQLite3.ColumnName(stQuery, i);
}
}
while (SQLite3.Step(stQuery) == SQLite3.Result.Row)
{
var obj = new object[colLenght];
lstRes.Add(obj);
for (int i = 0; i < colLenght; i++)
{
var columnType = SQLitePCL.raw.sqlite3_column_decltype(stQuery, i);
switch (columnType)
{
case "text":
obj[i] = SQLite3.ColumnString(stQuery, i);
break;
case "int":
obj[i] = SQLite3.ColumnInt(stQuery, i);
break;
case "real":
obj[i] = SQLite3.ColumnDouble(stQuery, i);
break;
case "blob":
obj[i] = SQLite3.ColumnBlob(stQuery, i);
break;
case "null":
obj[i] = null;
break;
}
}
}
return lstRes;
}
catch (Exception)
{
return null;
}
finally
{
if (stQuery != null)
{
SQLite3.Finalize(stQuery);
}
}
}
这篇关于是否可以从Sqlite查询返回动态对象或数据集?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!