如何从SQLite查询返回int值?

时间:2014-10-20 02:37:26

标签: c# sqlite windows-store-apps linqpad sqlite-net

我有这个SQLite方法:

internal static bool DataContainsAnyLocationInfo()
{
    int latCount = 0;
    using (var db = new SQLite.SQLiteConnection(App.DBPath))
    {
        string sql = "SELECT COUNT(Id) FROM PhotraxBaseData WHERE latitude > 0.0";
        latCount = db.Query<PhotraxBaseData>(sql);
    }
    return (latCount > 0);
}

...由于以下原因而无法编译:&#34; 无法隐式转换类型&#39; System.Collections.Generic.List&#39;到&#39; int&#39; &#34;

我只想要一个int,例如0或1或42,而不是整个List。

我确实已经安装了sqlite-net,如果能够做到这一点的方法更容易,而不是排除LINQy方式,如果它可以工作。

更新

也许我最好不要这样做:

internal static bool DataContainsAnyLocationInfo(List<PhotraxBaseData> _pbd)
{
    bool locInfoFound = false;
    foreach (PhotraxBaseData pbd in _pbd)
    {
        if (pbd.latitude > 0.0)
        {
            locInfoFound = true;
            break;
        }
    }
    return locInfoFound;
}

更新2

John Woo的代码编译,但我的SQL一定很糟糕,因为虽然我在PhotraxBaseData中有很多记录,其中纬度大于0,但该函数返回false。

当我直接在LINQPad4中运行这些查询之一时:

SELECT COUNT(Id) FROM PhotraxBaseData WHERE latitude > 0.0
SELECT COUNT(Id) FROM PhotraxBaseData WHERE (latitude > 0.0)

我明白了:

) or end of expression expected
; expected

注意: 纬度是双倍的。

更新3

所以现在我有两种工作方式(我上面的非数据库触摸代码,以及John Woo&#34; ExecuteScalar&#34;代码),但我不知道知道哪一个更好。它们都比一只饥肠辘辘的蜂鸟更快地掠过新发现的花蜜。

1 个答案:

答案 0 :(得分:3)

来自documentation,您可以使用以下代码:

latCount = db.ExecuteScalar<int>(sql); 

因为它将返回列表以外的行。我不知道你为什么会收到这个错误,但你的查询将在SQLFiddle上运行。