2

我有这个 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);
}

...由于以下原因无法编译:“无法将类型'System.Collections.Generic.List'隐式转换为'int'

我只想要一个 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 的“ExecuteScalar”代码),但我不知道哪一种更可取。它们都比饥饿的蜂鸟飞向新发现的花蜜要快。

4

1 回答 1

3

从他们的文档中,您可以使用以下代码:

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

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

于 2014-10-20T03:55:35.157 回答