在编写SQL应用程序并使用System.Data.SQLite时,我能够执行C#命令,例如:
string cosfun = string.Format("UPDATE test SET cosColumn = column1*cos(20));但是,当我尝试在Xamarin.Forms中使用类似的命令,使用sqlite-net-pcl包时,我得到以下错误: SQLite.SQLiteException:‘没有这样的函数: cos’
我在SO (Custom SQLite functions in Xamarin.iOS)上发现了类似的问题。然而,我并没有完全理解他们的反应。我现在有以下问题:
1)是否可以在Xamarin.Forms中使用sqlite-net-pcl自定义SQL函数?如果是这样,谁能分享一个简单的(但完整的)例子来说明如何做到这一点? 2)有没有什么方法可以让我访问相同的数学函数(pow,cos,sin等)?在C#中编写控制台应用程序时可以访问的内容? 3)有其他方法可以做到这一点吗?例如,我是否可以将数据库中的列读入列表,然后执行所需的数学函数,并将其反馈到数据库中?对于大型数据库来说,这是一个糟糕的想法吗?
提前谢谢你,
达斯汀
发布于 2018-11-05 15:53:04
由Frank Kreuger开发的SQLite-net PCL是Xamarin大学在其XAM160中使用的-使用SQLite和移动数据类:https://university.xamarin.com/classes/track/cross-platform-design
您可以在Xamarin开发人员站点上找到一些关于如何入门的文档:http://developer.xamarin.com/recipes/android/data/databases/sqlite/
更多信息:
发布于 2018-11-05 18:36:39
如果我错了,请纠正我,但您尝试做的实际上是有两列,其中一列包含一组数据,另一列包含第一列中的简单数学运算的结果。因此,您有两列,其中一列依赖于另一列,这意味着您占用的内存空间是所需内存空间的两倍。对于100个条目,这是可以的。为了一百万美元?不是那么回事。
我个人认为你最好有而不是有cosColumn,而且你应该在读取数据时计算余弦。例如:
// In your C# code...
public class MyData
{
public double Column1 { get; set; } = 0.0;
public double Cosine => Math.Cos(Column1);
}在上面的代码中,余弦值永远不会在C#或SQLite中存储或创建,但只有在需要时才会获得。这使得它对SQLite表更加内存友好,并且它实现了更好的SQLite结构。
在上面的代码中,这一行:
public double Cosine => Math.Cos(Column1);完全等同于:
public double Cosine
{
get
{
return Math.Cos(Column1);
}
}这两者之间并没有什么真正的区别,而且您节省了很多行空间。您可以在Alex Booker的this StackOverflow answer中找到有关=>符号的更多信息。
让我们来看一个实现这个结构的例子。假设您有一个数据库,其中有一个名为Column1的列,并且您希望对该值应用一个余弦函数并显示它。您的代码可能如下所示:
// Read from database object of type MyData
MyData data = ReadOneValueFromDatabase<MyData>();
// Display values in a label
MyValueLabel.Text = "Database value: " + data.Column1.ToString();
MyCosineLabel.Text = "Cosine value: " + data.Cosine.ToString();对象data将数据库中Column1的值存储在Column1中,而不是中,而不是 Cosine中。仅当调用 data.Cosine时,才会获取Cosine的值。
https://stackoverflow.com/questions/53137849
复制相似问题