首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sqlite-net-pcl和Xamarin.Forms访问数学函数

使用sqlite-net-pcl和Xamarin.Forms访问数学函数
EN

Stack Overflow用户
提问于 2018-11-04 12:49:58
回答 2查看 408关注 0票数 0

在编写SQL应用程序并使用System.Data.SQLite时,我能够执行C#命令,例如:

代码语言:javascript
复制
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)有其他方法可以做到这一点吗?例如,我是否可以将数据库中的列读入列表,然后执行所需的数学函数,并将其反馈到数据库中?对于大型数据库来说,这是一个糟糕的想法吗?

提前谢谢你,

达斯汀

EN

回答 2

Stack Overflow用户

发布于 2018-11-05 15:53:04

  1. First可以。

由Frank Kreuger开发的SQLite-net PCL是Xamarin大学在其XAM160中使用的-使用SQLite和移动数据类:https://university.xamarin.com/classes/track/cross-platform-design

  1. Second可以。

您可以在Xamarin开发人员站点上找到一些关于如何入门的文档:http://developer.xamarin.com/recipes/android/data/databases/sqlite/

  1. 第三个答案很清楚。

更多信息:

你可以参考here的官方文档,另一个类似的讨论可能对你this有帮助。

票数 0
EN

Stack Overflow用户

发布于 2018-11-05 18:36:39

如果我错了,请纠正我,但您尝试做的实际上是有两列,其中一列包含一组数据,另一列包含第一列中的简单数学运算的结果。因此,您有两列,其中一列依赖于另一列,这意味着您占用的内存空间是所需内存空间的两倍。对于100个条目,这是可以的。为了一百万美元?不是那么回事。

我个人认为你最好有而不是cosColumn,而且你应该在读取数据时计算余弦。例如:

代码语言:javascript
复制
// In your C# code...

public class MyData
{
    public double Column1 { get; set; } = 0.0;
    public double Cosine => Math.Cos(Column1);
}

在上面的代码中,余弦值永远不会在C#或SQLite中存储或创建,但只有在需要时才会获得。这使得它对SQLite表更加内存友好,并且它实现了更好的SQLite结构。

在上面的代码中,这一行:

代码语言:javascript
复制
public double Cosine => Math.Cos(Column1);

完全等同于:

代码语言:javascript
复制
public double Cosine
{
    get 
    { 
        return Math.Cos(Column1); 
    }
}

这两者之间并没有什么真正的区别,而且您节省了很多行空间。您可以在Alex Booker的this StackOverflow answer中找到有关=>符号的更多信息。

让我们来看一个实现这个结构的例子。假设您有一个数据库,其中有一个名为Column1的列,并且您希望对该值应用一个余弦函数并显示它。您的代码可能如下所示:

代码语言:javascript
复制
// 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的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53137849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档