【问题标题】:How can I return an int value from a SQLite query?如何从 SQLite 查询返回 int 值?
【发布时间】:2014-10-20 02:37:25
【问题描述】:

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

吴宇森的代码可以编译,但是我的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”代码),但我不知道哪一种更可取。它们都比饥饿的蜂鸟飞向新发现的花蜜要快。

【问题讨论】:

  • 你使用的是来自Dapper.Query&lt;T&gt;吗?
  • 不;没听说过他。
  • 请参阅更新 2。
  • 如果您要查询int,为什么要查询PhotraxBaseData 的类型参数,不应该只是db.Query&lt;int&gt;(sql).Single();
  • 来自他们的documentation,您可以使用此代码latCount = db.ExecuteScalar&lt;int&gt;(sql);,因为它将返回除列表之外的行。我不知道您为什么会收到该错误,但它会在 SQLFiddle 上运行。

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


【解决方案1】:

来自他们的documentation,你可以使用这个代码:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2013-11-22
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多